XSLT:通过其他元素的值选择元素

问题描述:

如何输出依赖于其他元素值的一个元素的值? 我想到位XXXXSLT:通过其他元素的值选择元素

<xsl:value-of select="/node1/node2[@name=XXX]"/@lng> 

和XXX代替使用其他元素的值我想要的值:

/node3/node4/@val 

简化XML:

<node> 
    <node1> 
     <node2 name="abc" lng="uk"> 
     </node2> 
    </node1> 
    <node3> 
     <node4 val="abc"> 
     </node4> 
    </node3> 
</node> 

我知道它可以实现:

<xsl:value-of select="/node1/node2[@name='abc']"/@lng> 

但我不知道在node4/val中会有什么值val 我该如何实现它?

一个回答你的问题是要做到这一点...

<xsl:value-of select="/node/node1/node2[@name=/node/node3/node4/@val]/@lng" /> 

还是略胜一筹,使用可变

<xsl:variable name="node4val" select="/node/node3/node4/@val" /> 
<xsl:value-of select="/node/node1/node2[@name=$node4val]/@lng" /> 

但我猜你可能有多个node4元素你的XML,也许你想得到每个人的价值?在这种情况下,它会看起来更像这个...

<xsl:for-each select="/node/node3/node4"> 
    <xsl:value-of select="/node/node1/node2[@name=current()/@val]/@lng" /> 
</xsl:for-each> 

或者,具有可变

<xsl:for-each select="/node/node3/node4"> 
    <xsl:variable name="val" select="@val" /> 
    <xsl:value-of select="/node/node1/node2[@name=$val]/@lng" /> 
</xsl:for-each> 

更妙的是使用一个密钥。试试这个,例如

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

    <xsl:key name="node2s" match="node2" use="@name" /> 

    <xsl:template match="/"> 
    <xsl:for-each select="/node/node3/node4"> 
     <xsl:value-of select="key('node2s', @val)/@lng" /> 
    </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet>