XSLT key statement return a group and i cannot separate 结果

XSLT key statement return a group and i can not separate the result

我有一个问题,我需要你帮助解决以下 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 中,我使用了键语句,但我得到了不止一个键 link 的结果。

<xsl:key name="test" match="//E" use="@Nr"/>

为了区分子树我想使用来自B的属性。 所以我的结果是:

Fo C
Bar C

但是我觉得有必要使用key因为in 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"/>

演示https://xsltfiddle.liberty-development.net/ehVZvvG