我有一段看起来像这样的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>
我需要对其进行转换,以便从每个tag2节点获取子标记2和3,但仅限于subtag1为apple的tag2节点。 我还需要为每个节点分配一个序列号。
我的当前代码类似于这样:
<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 只返回 subtag1 是苹果(即 subtag1 = apple)的 tag2 外,这个方案是可行的。我不能使用 xsl:if 或 xsl:when,因为这样第二个苹果的序列号会不准确。
有什么想法吗?
谢谢, Rik