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>

に がある場合、と の両方を参照するfor-eachblock1はどうすればよいですか?idblock1idblock2

これは機能しますが、面倒だと思います...

<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

の要素を参照するように$idinを置き換える簡単な方法はありますか?select="//block2/item[id=$id]/text"idfor-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 に答える