2010-07-02 4 views
3

제가 position()에 대해 알고 있다고 말하면서 시작하겠습니다.하지만이 컨텍스트에서 작동하게 만드는 방법을 알아낼 수 없습니다.XPATH를 사용하여 특정 XML 노드의 위치를 ​​얻으시겠습니까?

내가하려는 것은 텍스트 본문을 반복하여 모든 이미지를 찾는 것입니다. 이것들은 "그림 1"이라고하는 링크로 바뀔 것입니다. 이 번호는 다른 노드 집합의 해당 노드에있는 position()에 의해 제공됩니다. 여기

내 XML의 샘플입니다 : 나는 XML에 다른 장소에서 그 item 노드의 위치를 ​​될 것을 얻기 위해 다른 방법의 숫자를 시도했습니다

<understanding-individual-question> 
    <section id="18" handle="questions">Questions</section> 
    <entry id="162"> 
     <images items="3"> 
      <item id="215"> 
       <description mode="normal" handle="winter-frozen-period-for-stile-s-pond" word-count="6">Winter frozen period for Stile’s Pond.</description> 
       <file size="73 KB" path="/uploads" type="image/jpg"> 
        <filename>lakefrozen-1276880623.jpg</filename> 
        <meta creation="2010-06-18T13:03:43-04:00" width="532" height="479" /> 
       </file> 
       <title mode="normal" handle="stiles-pond-frozen" word-count="3">Stile's Pond Frozen</title> 
      </item> 
     </images> 
    </entry> 
</understanding-individual-question> 

하지만 난 계속 오류를 반환하거나 아무것도 입력하지 마십시오. NaN.

<xsl:template match="information//img"> 
    <xsl:variable name="link" select="substring-after(@src,'uploads/')" /> 
    <em>(<a rel="figure" href="{@src}"> 
     <xsl:text>See Figure </xsl:text> 
     <!-- Method 1: Returns all as 'NaN' --> 
     <xsl:number value="/data/understanding-individual-question/entry/images/item[file/filename = $link][position()]" format="1"/> 
     <!-- Method 2: Returns all as '1' --> 
     <xsl:for-each select="/data/understanding-individual-question/entry/images/item[file/filename = $link]"> 
      <xsl:number value="position()" format="1"/> 
     </xsl:for-each> 
     <!-- Method 3: Returns all as '2' --> 
     <xsl:number value="position()" format="1"/> 
    </a>.)</em> 
</xsl:template> 

XPATH을 확인했고 올바른 노드, 아무 문제를 반환

는 여기에 내가 해봤 XSLT의 세 가지 예입니다. 그러나, 내가 뭘하든 결코 노드의 position()을 반환하지 않습니다! 그리고 나는 이유를 알 수 없다.

this question's solutions 다음을 시도했지만 계속 NaN이되었습니다.

누구나 어떻게해야할까요? 두 번째 방법의 사용으로

+0

당신은 위치가 1 수 있도록,보다 현실적인 XML 문서를 제공하고 어떤 결과 (출력)이 예상을 지정하십시오, 하나 개의 파일이 있습니다. –

+0

내가 뭘 하려는지 자세히 보면 '이미지'안에'item'의 위치를 ​​얻는 것입니다. 살펴볼 중복 XML의 백 줄이 없도록 하나만 볼 수 있습니다. : P 또한 이러한 상황에서 XSLT의 다른 위치에 위치하기 때문에'position()'을 얻을 수 있습니다. 그러나, 거기에 사용하는 코드는이 상황에서 작동하지 않습니다. 추가 설명을 위해 –

+0

(+1) - 편집하고 질문에 넣으면 좋을 것입니다. 간단하고 짧은 해결책에 대한 내 대답을 참조하십시오 :) –

답변

2

:

count(preceding-sibling::item) +1 
+0

그랬어! 너 락! –

관련 문제