2016-11-20 11 views
1

特定のノードの値を取得するには、id属性で指定します。しかし、私のXSLパーサであるSaxonの動作は、どうやって動作するのかということではありません。XPathでの属性値の比較

これは私のXSLコードです:私はちょうどconnecteur属性を持つsynonymeという名前のタグにマッチした

<xsl:template match="synonyme"> 
    <xsl:element name="corr"> 
     <xsl:value-of select="@connecteur" /> 
     <xsl:value-of select="/liste/connecteur[@[email protected]]/forme[1]" /> 
    </xsl:element> 
</xsl:template> 

。私のコードは、この属性の値を出力します。

connecteur属性に一致するid属性を持つ別のノードの値を、現在一致しているsynonymeタグの出力したいとします。しかし、このクエリで結果が見つからない場合は、2番目のvalue-ofには常に空の出力があります。

[@id='c160']c160は最初のvalue-ofによって出力されるのと全く同じものですが、動作します!しかし、私のマッチしたノードの@attributeと比較してはいけません。これをどうすれば解決できますか?

XMLは基本的に

<liste><connecteur id="c160"><forme>foo</forme></connecteur> 
     <connecteur id="c161"><synonyme connecteur="c160" /></connecteur> 
</liste> 

あるとsynonymeの代わりに、予想される出力は<corr>c160 foo</corr>です。

答えて

1

使用する述語: - idconnecteur - 等しい値を持つ

[@[email protected]] 

は、次の2つの属性を持つ要素を探しています。値現在の要素のconnecteur値の値と一致するid属性を持つ要素を探すために、あなたが使用する必要があります。

[@id=current()/@connecteur] 

参照:https://www.w3.org/TR/xslt/#function-current


より良い解決策を定義することですキーとして:その後、

<xsl:key name="ref" match="connecteur" use="@id" /> 

使用:

相互参照を解決する。

参照:https://www.w3.org/TR/xslt/#key

関連する問題