2017-06-29 15 views
0

anothers要素の値に依存するある要素の値を出力するにはどうすればよいですか? は私がの価値をしたい XSLT:別の要素の値で要素を選択

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

とXXXの代わりに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にはどのような値が入っているのか分かりません どうすれば実現できますか?

答えて

1

あなたの質問への答えは、これを行うことであろう一つ...

<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>