我有问题,下面的XML示例需要您的帮助。
<A>
<B Name="Alpha">
<C>
<D>
<E Nr="1" Wert="A"/>
<E Nr="2" Wert="B"/>
<E Nr="3" Wert="C"/>
<E Nr="4" Wert="D"/>
</D>
<F Name="Fo" E_Nr="3"/>
</C>
</B>
<B Name="Beta">
<C>
<D>
<E Nr="1" Wert="E"/>
<E Nr="2" Wert="F"/>
<E Nr="3" Wert="G"/>
<E Nr="4" Wert="H"/>
</D>
<F Name="Bar" E_Nr="2"/>
</C>
</B>
转换后的结果应为以下文本。
Fo C
Bar F
在我的XSLT中,我使用了key语句,但是对于key link,我得到了一个以上的结果。
<xsl:key name="test" match="//E" use="@Nr"/>
为了区分子树,我想使用B中的属性。所以我的结果是:
Fo C
Bar C
但是我认为有必要使用密钥,因为D中的键可以位于E个节点的千个之内。
使用XSLT是否可以有效解决此问题?
为您提供帮助!
要将键限制为当前的B
元素,请将其定义为:
<xsl:key name="e" match="E" use="concat(@Nr, '|', generate-id(ancestor::B))" />
然后从F
的上下文中将其称为:
<xsl:value-of select="key('e', concat(@E_Nr, '|', generate-id(ancestor::B)))/@Wert"/>