2016-11-20 86 views
1

我想獲取由其id屬性指定的特定節點的值。但是,我的XSL解析器Saxon的行爲並不是我期望它的工作方式。比較XPath中的屬性值

這是我的XSL代碼:

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

我只匹配了一個名爲synonyme標籤具有connecteur屬性。我的代碼輸出這個屬性的值。

我還希望輸出具有id屬性的其他節點的值,該屬性與我當前匹配的synonyme標記的connecteur屬性相匹配。但是這個查詢沒有找到結果,第二個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

謂語使用:

[@[email protected]] 

正在尋找一個元素有兩個屬性 - idconnecteur - 用相等值。爲了尋找與id屬性值爲當前元素的connecteur價值的價值相匹配的元素,你需要使用:

[@id=current()/@connecteur] 

參見:https://www.w3.org/TR/xslt/#function-current


更好的解決方案將是確定一個關鍵爲:

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

然後使用:

<xsl:value-of select="key('ref', @connecteur)/forme" /> 

解決交叉引用。

參見:https://www.w3.org/TR/xslt/#key