1

比实际需要更多的参考:当在其他地方使用相同的元素名称时XPath,允许我引用块中的元素的语法是什么?xsl:for-each

请注意,很遗憾,这必须是 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>

如果我有 a for-eachon the block1,我如何同时引用 inside idtheblock1idwithin the block2

这会起作用,但我认为它很混乱......

<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

是否有一种简化的方法来替换$idinselect="//block2/item[id=$id]/text"以便它引用id来自 的元素for-each

4

2 回答 2

1

另一种您可能会发现更清晰并且可能更快的方法是使用键:

<xsl:key name="b2" match="block2/item" use="id"/>

然后

<xsl:value-of select="key('b2', id)/text"/>
于 2013-10-16T08:22:19.233 回答
0

你所拥有的是正确和普遍的。无需进一步简化;这是使用 XSLT 的人认可和使用的标准习语。

于 2013-10-15T15:18:57.497 回答