2016-11-20 1 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> 

. 내 코드는이 속성의 값을 출력합니다.

또한 현재 synonyme 태그의 connecteur 속성과 일치하는 id 속성을 가진 다른 노드의 값을 출력하려고합니다. 그러나이 쿼리에 대한 결과는 찾을 수 없으며 두 번째 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 - 동일한 값. 값이 현재 요소의 connecteur 값의 값과 일치하는 id 속성이있는 요소를 찾아, 당신은 사용할 필요가 :

[@id=current()/@connecteur] 

참조 : https://www.w3.org/TR/xslt/#function-current


더 나은 솔루션을 정의하는 것 A는 과 같이 다음

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

사용

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

가 상호 참조를 해결합니다.

참조 : https://www.w3.org/TR/xslt/#key