在 for-each 中使用相同的数据元素名称



比实际需要更多的参考:当在其他地方使用相同的元素名称时,允许我在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中的idblock2中的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 的人员识别和使用的标准习语。

相关内容

  • 没有找到相关文章