XML-функции в PHP. Парсинг только определенных тегов.

shp

Guest
2 Orlis. Спасибо, с get_all я уже и сам разобрался.

-~{}~ 21.02.05 22:51:

2 Orlis. По ходу дела возник вопрос. Вот фрагмент XSL-документа:
Код:
<xsl:template match="img">
 <xsl:choose>
 <xsl:when test="document('file_exists:[src]')/root='true'">
 .......
</xsl:template>
, где вместо [src] необходимо передать значение атрибута src текущего элемента img. Как это можно сделать?
И еще: можно ли с помощью for-each перебрать все атрибуты этого же элемента img и как к ним обратиться (для того, чтобы вывести только необходимые)?
 

Orlis

Guest
Ответ на первый вопрос приведен в моем примере использования как раз над вопросом. :/

Ответ на второй вопрос можно найти в RTFM (XPath).
 

shp

Guest
2 Orlis. Спасибо, вроде разобрался, все работает:
PHP:
<img>
<xsl:for-each select="@*">
 <xsl:if test="name (.) != 'align'">
   <xsl:attribute name="{name (.)}"><xsl:value-of select="."/></xsl:attribute>
 </xsl:if> 
</xsl:for-each>
</img>
Осталась одна проблемка: не увеличивается значение переменной i при очередном применении шаблона:
PHP:
<xsl:template match="img">
 <xsl:variable name="i" select="$i+1"/>
 <xsl:choose>
 .....
   <img><xsl:attribute name="name">image<xsl:value-of select="$i"/></xsl:attribute> - все время выдается image1
 .....
 </xsl:when>
 <xsl: otherwise>
 .....
 </xsl: otherwise>
 </xsl:choose>
</xsl:template>
Переменная объявляется в начале XSL-файла после <xsl: output> : <xsl:variable name="i" select="0"/>. Может, кто подскажет, в чем дело?
 

Orlis

Guest
В XSLT нет переменных, <xsl:variable> это по сути константа.

Теоретически любой итеративный алгоритм можно переписать в рекурсивный и наоборот, а в твоем случае нужно
использовать функцию position()

<img name="image{position()}"/>

---
<img>
<xsl:for-each select="@*">
<xsl:if test="name (.) != 'align'">
<xsl:attribute name="{name (.)}"><xsl:value-of select="."/></xsl:attribute>
</xsl:if>
</xsl:for-each>
</img>

это равносильно 1 строчке:
<img><xsl:copy-of select="@*[ name() != 'align']"/></img>

вопросы по XSLT лучше задавать на форумах по XML, а не тут
 
Сверху