나는 이와 같은 XML을 가지고있다. 그것은 외부에서 공급되며 변경할 수 없습니다 :오직 하나의 조상 노드 값을 얻는다.
<locations>
<country iso_code="CA">
<name>Canada</name>
<state abbreviation="AB">
<name>Alberta</name>
<city>
<name>Leduc</name>
<location id="1"/>
</city>
</state>
<state abbreviation="BC">
<name>British Columbia</name>
<city>
<name>Abbotsford</name>
<location id="2"/>
<location id="3"/>
</city>
</state>
</country>
<country iso_code="US">
<name>United States</name>
<state abbreviation="AZ">
<name>Arizona</name>
<city>
<name >Wikiup</name>
<location id="1"/>
</city>
</state>
</country>
</locations>
내 XSL은 다음과 같습니다 : 나는 xsltproc을 실행하면
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1"/>
<xsl:strip-space elements="*" />
<xsl:template match="/">
<xsl:for-each select="//location[@id]">
<xsl:call-template name="location"/>
</xsl:for-each>
</xsl:template>
<xsl:template name="location">
<xsl:value-of select="@id"/>,
<xsl:value-of select="ancestor::city[1]"/>,
<xsl:value-of select="ancestor::state[1]"/>,
<xsl:value-of select="ancestor::state[1]/@abbreviation"/>,
<xsl:value-of select="ancestor::country[1]"/>,
<xsl:value-of select="ancestor::country[1]/@iso_code"/>,
</xsl:template>
</xsl:stylesheet>
, 나는이 출력 (I 그것을 samller 수 있도록 여분의 줄을했다) 수 : 나는 조상 [1] :이 모든 ancesotors, 내가 찾고 아니라 단지 하나의 값을 끌어 할 때
1,Leduc,AlbertaLeduc,AB,CanadaAlbertaLeducBritish ColumbiaAbbotsford,CA,
2,Abbotsford,British ColumbiaAbbotsford,BC,CanadaAlbertaLeducBritish ColumbiaAbbotsford,CA,
3,Abbotsford,British ColumbiaAbbotsford,BC,CanadaAlbertaLeducBritish ColumbiaAbbotsford,CA,
...etc...
문제입니다.
1,Leduc,Alberta,AB,Canada,CA,
2,Abbotsford,British Columbia,BC,Canada,CA,
3,Abbotsford,British Columbia,BC,Canada,CA,
...etc...
내가 ../../ 사용하여 시도 : 여기
처럼 출력이 보일 것입니다 것입니다. 표기법과 같은 결과를 얻었다. 몇 가지 다른 표기법으로 연주했는데 작동하지 않거나 연결된 값으로 다시 끝납니다.
처리중인 노드에 대한 직접 부모 만 해당 값을 얻는 방법은 무엇입니까?
여기 올바른 용어를 사용하고 있습니다. 이것은 하나의 프로젝트에 XSL을 처음 사용하는 것입니다.
상점에있는 웹 녀석들에게도 어려움이 있습니다. 그들은 종종 XSL을 사용하지 않습니다.
감사로드 :
여기에 코드의 제안 개선! 귀하의 수정 사항과 동일한 코드를 수행 했었습니다 : 예 : 템플릿을 사용하여 작성했으나 그 당시의 코드를 게시하기 전에 저의 쓰레기 중 하나였습니다. 내가 말했듯이, 이것은 하나 떨어져 있으며 나는 xsl을 사용하지 않습니다. 누락 된 조각은 노드의 가치를 얻으려면/name입니다! – user2855855
나는 그것이 당신을 위해 일해서 다행이다! 귀하의 질문에 대한 답변이 있으면 확인 표시를 클릭하여 동의 할 수 있습니까? –