제가 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
이되었습니다.
누구나 어떻게해야할까요? 두 번째 방법의 사용으로
당신은 위치가 1 수 있도록,보다 현실적인 XML 문서를 제공하고 어떤 결과 (출력)이 예상을 지정하십시오, 하나 개의 파일이 있습니다. –
내가 뭘 하려는지 자세히 보면 '이미지'안에'item'의 위치를 얻는 것입니다. 살펴볼 중복 XML의 백 줄이 없도록 하나만 볼 수 있습니다. : P 또한 이러한 상황에서 XSLT의 다른 위치에 위치하기 때문에'position()'을 얻을 수 있습니다. 그러나, 거기에 사용하는 코드는이 상황에서 작동하지 않습니다. 추가 설명을 위해 –
(+1) - 편집하고 질문에 넣으면 좋을 것입니다. 간단하고 짧은 해결책에 대한 내 대답을 참조하십시오 :) –