xslt选择特定嵌套子级的父级

时间:2017-02-25 02:48:02

标签: xml xslt

我对Xml / Xslt没有多少经验,所以希望论坛能够原谅我的无知。我有以下xml结构,我试图获得标签"类别1"无论我的变量存在于子/孙子节点中的哪个位置: 能告诉你吗。

===== XML ============

<Result>
 <sitemap>
    <node>
        <label>this is top node</label>
        <node>
            <label key="">Category 1</label>
            <node>
                <link>
                   <value>link1</value>
                </link>
            </node>
            <node>
                <link>
                   <value>link2</value>
                </link>
                <node>
                    <link>
                        <value>link21</value>
                    </link>
                </node>
                <node>
                    <link>
                        <value>link22</value>
                    </link>
                </node>
            </node>     
        </node> 

        <node>
            <label key="">Category 2</label>        
        </node>
    </node>
 </sitemap>
</Result>

=================XSLT 2.0 ================ 
<xsl:variable name="myvalue" select="'link22'" />
<xsl:if test="//node[node[link/value=$myvalue]]/node">
   <xsl:value-of select="//node[node[link/value=$myvalue]]/label" />
</xsl:if>

=================输出=============== LINK2

2 个答案:

答案 0 :(得分:0)

试试这个

    <xsl:variable name="myvalue" select="'link22'" />
    <xsl:if test="//node[node/link/value=$myvalue]">
        <xsl:value-of select="//node[node/link/value=$myvalue]/link/value" />
    </xsl:if>

答案 1 :(得分:0)

我大多在猜这里,但是给出了:

<xsl:variable name="myvalue" select="'link22'" />

以下说明:

<xsl:value-of select="//link[value=$myvalue]/ancestor::node[label][1]/label" />

将返回:

Category 1

更有效的方法是使用密钥通过link找到value元素,即:

<xsl:key name="link-by-value" match="link" use="value" />

(在顶层),然后:

<xsl:value-of select="key('link-by-value', $myvalue)/ancestor::node[label][1]/label" />