比实际需要更多的参考:当在其他地方使用相同的元素名称时,允许我在xsl:for-each
块中引用元素的XPath
语法是什么?
请注意,不幸的是,这必须是 1.0 解决方案
例如,我有以下简单的 XML,我想匹配具有相同id
值的项目......
<data>
<block1>
<item><id>1</id><text>Hello</text></item>
<item><id>2</id><text>World</text></item>
</block1>
<block2>
<item><id>1</id><text>123</text></item>
<item><id>2</id><text>ABC</text></item>
</block2>
</data>
如果我在block1
上有for-each
,我如何同时引用block1
中的id
和block2
中的id
?
这会起作用,但我认为这很混乱...
<xsl:for-each select="//block1/item">
<xsl:variable name="id" select="id"/>
<xsl:value-of select="text"/> - <xsl:value-of select="//block2/item[id=$id]/text"/>
</xsl:for-each>
结果...
Hello - 123
World - ABC
是否有一种简化的方法来替换select="//block2/item[id=$id]/text"
中的$id
,以便它引用for-each
中的id
元素?
你可能会发现更清晰,而且可能会更快,是使用键:
<xsl:key name="b2" match="block2/item" use="id"/>
然后
<xsl:value-of select="key('b2', id)/text"/>
你所拥有的是正确的和常见的。 没有必要进一步简化它;它是使用 XSLT 的人员识别和使用的标准习语。