2017-04-05 6 views
2

테이블 셀에서 각 규칙을 처리하려고하는데 변수를 사용할 때 올바른 속성 값에 액세스하는 데 문제가 있습니다.XSLT 2. 0 변수에 대한 노드 선택 직접 선택

맨 아래 규칙 만 처리하려고합니다 (@ 플래그 = "b"). 이 XML

<?xml version="1.0" encoding="UTF-8"?> 
<cell> 
    <rules> 
     <rule flags="t" width="0.3528" colour="black"/> 
     <rule flags="b" width="0.3528" colour="black"/> 
     <rule flags="b" width="0.7056" colour="none"/> 
     <rule flags="b" width="0.3528" colour="black"/> 
    </rules> 
<para>19.3%</para> 
</cell> 

나는이 XSLT를 사용하는 경우

을 감안할 때

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:template match="cell"> 
    <xsl:variable name="i">2</xsl:variable> 
    <xsl:value-of select="child::rules/rule[contains(@flags, 'b')][2]/@width"/> 
    </xsl:template> 
</xsl:stylesheet> 

결과는 내가 무엇을 찾고 있지만, 이는 '0.7056'이며, 나는 내 선택에 변수를 사용하는 경우

 <xsl:value-of select="child::rules/rule[contains(@flags, 'b')][$i]/@width"/> 

결과는 '0.3528 0.7056 0.3528'입니다. 변수에 2의 값이 있어도 모든 규칙 요소의 너비 특성을 잡아 내고 있습니다.

변수를 사용하여 특정 숫자를 사용하면 차이가 발생하는지 궁금합니다. 이 문제를 해결하는 방법에 대해 알아 보겠습니다.

<xsl:variable name="i">2</xsl:variable> 

당신이 result tree fragment을 만듭니다 변수에 대한

+0

내가 대신 정수의 문자열로 변수를 치료해야한다고 생각 해요,하지만 강제 할 수있는 방법이있다? – user3198443

답변

2

을 사용해야합니다.

는이처럼 만드는 경우 :

<xsl:variable name="i" select="2"/> 

가 실제 숫자 그리고 당신이 술어를 사용처럼 사용할 수 있습니다. 당신의 xsl:value-of ...

  • 은 매우 정확하지 않을 수도 flags 속성을 테스트 contains()를 사용하여, 데이터에 따라 약

    몇 가지 참고 사항. flags이 둘 이상의 값을 가질 수있는 경우 tokenize()을 사용하는 것이 좋습니다.

  • child:: 축 사용은 괜찮지만 꼭 필요한 것은 아닙니다.

예 :

<xsl:value-of select="rules/rule[tokenize(@flags,'\s+')='b'][$i]/@width"/> 
0

당신은 당신이 이런 식으로 내부의 "2"를 넣어 당신의 변수를 만들 때

<xsl:value-of select="child::rules/rule[contains(@flags, 'b')][position() = $i]/@width"/> 
+0

괜찮지 만 이것이 절대 위치입니까, 아니면 @ flags = b 기준을 가진 노드 내의 위치입니까? – user3198443

+0

규칙의 절대 위치는 @ flags = b입니다. – Rupesh