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

时间:2013-10-15 15:12:01

标签: xslt xpath xslt-1.0

更多供参考而非实际需要: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>

如果for-each上有block1,我如何引用id中的block1和{{1}中的id }}?

这会有效,但我觉得它很混乱......

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 中的$id,以便它引用select="//block2/item[id=$id]/text"中的id元素?

2 个答案:

答案 0 :(得分:1)

另一种方法,你可能会发现更清晰,可能更快,是使用键:

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

然后

<xsl:value-of select="key('b2', id)/text"/>

答案 1 :(得分:0)

你所拥有的是正确和普遍的。没有必要进一步简化它;它是使用XSLT的人员认可和使用的标准习语。