<tref>
요소를 내 문서의 다른 태그로 바꿔야합니다. 예를 들어, 내가 가진 :이 스타일 시트와XSLT의 요소를 재귀 적으로 바꾸기
<p id="4">
<cs id="56792">1090-189-01 </cs>
<href id="57237">
<cs id="56792">Document Name</cs>
</href>
</p>
:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="tref">
<xsl:variable name="NodeID"><xsl:value-of select="@id"/></xsl:variable>
<xsl:copy-of select="//Topic[ID = $NodeID]/Text/p/node()"/>
</xsl:template>
다음이 문제가되지 않습니다 얻기
<tref id="57236"/>
및
<Topic>
<ID>57236</ID>
<Text>
<p id="4">
<cs id="56792">1090-189-01 </cs>
<href id="57237">
<cs id="56792">Document Name</cs>
</href>
</p>
</Text>
</Topic>
을
내가 할 수없는 것은 다른 trefs에 중첩 된 trefs를 대체하는 것입니다. 예를 들어, 다음 사항을 고려
<tref id="57236"/>
과 :
<Topic>
<ID>57236</ID>
<Text>
<p id="251">
<tref id="37287"/>
</p>
</Text>
</Topic>
내 스타일이 정식 태그의 내용으로 TREF을 대체
- 또한 TREF 포함
<p id="251">
<tref id="37287"/>
</p>
내 현재 해결책은 두 개의 서로 다른 스타일 시트에서 <xsl:template match="tref">
으로 호출하는 것입니다. 그것은 일을하지만 아주 우아하지는 않습니다. trefs가 더 깊게 중첩되어 있다면 어떻게 될까요? 그리고 재귀는 XSLT의 빵과 버터입니다.
XSLT처럼 모든 trefs를 재귀 적으로 바꾸는 해결책이 있습니까?
Tim, 답변 해 주셔서 대단히 감사합니다. 스 니펫 # 1과 # 2를 적용했으며 제대로 작동합니다. 나는 xsl : key에 익숙하지 않기 때문에 # 3과 # 4에 대해 숙고해야 할 것입니다. –
스 니펫 4에 약간의 오류가 있었는데, 지금 수정했습니다. 특히 XSLT 1.0에서 그룹화 할 필요가있는 경우 매우 유용한 명령이므로 xsl : key에 대해 학습하는 것이 좋습니다. –