XSLT键语句返回一个组,我无法分离结果

问题描述 投票:0回答:1

我有问题,下面的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是否可以有效解决此问题?

为您提供帮助!

xml xslt-1.0
1个回答
0
投票

要将键限制为当前的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

© www.soinside.com 2019 - 2024. All rights reserved.