У меня есть кусок XML, который выглядит следующим образом:
<root>
<tag1>tractor</tag1>
<tag2>
<subtag1 att="apple" />
<subtag2>
<subsubtag1>red</subsubtag1>
<subsubtag2>lunch</subsubtag2>
</subtag2>
</tag2>
<tag1>forklift</tag1>
<tag2>
<subtag1 att="pear" />
<subtag2>
<subsubtag1>green</subsubtag1>
<subsubtag2>breakfast</subsubtag2>
</subtag2>
</tag2>
<tag2>
<subtag1 att="apple" />
<subtag2>
<subsubtag1>green</subsubtag1>
<subsubtag2>dinner</subsubtag2>
</subtag2>
</tag2>
<tag1>combine harvester</tag1>
</root>
Что мне нужно, чтобы преобразовать его так, чтобы я получал подтеги 2 и 3 от каждого узла tag2, но только от узлов tag2, где subtag1 - это яблоко. Мне также нужен порядковый номер для каждого.
Мой текущий код выглядит примерно так:
<xsl:for-each select="//tag2">
<apple>
<seq_num><xsl:value-of select="position()" /></seq_num>
<colour><xsl:value_of select="subtag2" /></colour>
<meal><xsl:value_of select="subtag3" /></meal>
</apple>
</xsl:for-each>
Это было бы хорошо, за исключением того, что мне нужно, чтобы for-each только возвращал tag2, которые являются яблоками (то есть subtag1 = apple). Я не могу использовать xsl: if или xsl: when потому что тогда порядковый номер был бы неточным для второго яблока.
Есть идеи?
Спасибо,
Rik