나는이 같은 XML이 :xsl : 자체적으로 생성 된 노드에서 xsl : apply-templates를 사용하려면 어떻게해야합니까?
<span reference="1">Reference Text 1</span>
<term reference="2">Reference Text 2</term>
을 그리고 나는 그것이이 될 필요가 다음 reference
속성을 가진 요소가 범위 인 경우
<span class="referenceText">Reference Text 1</span> <a href="1">[1]</a>
<i>Reference Text 2</i> <a href="2">[2]</a>
, 기본적으로, 우리는 그냥두고 있는 그대로, class="referenceText"
을 추가하십시오. 그러나 다른 요소 인 경우이 요소에 대해 생성 된 템플릿을 적용해야합니다. <term>
가 <i>
가되어야하는 이유입니다 - 나는 그것에 대한 템플릿이 있습니다
<xsl:template match="*[@reference]">
<xsl:param name="href" select="./@reference"/>
<xsl:choose>
<xsl:when test="name() = 'span'">
<span class="referenceText">
<xsl:value-of select="."/>
</span>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
<xsl:text> </xsl:text><a href="#{$href}">[<xsl:value-of select="./@href"/>]</a>
</xsl:template>
불행하게도,이 결과 :이 템플릿을 가지고 "참조"태그를 가진 모든 요소의 변화에 대한
<xsl:template match="term">
<i><xsl:apply-templates select="@* |node()"/></i>
</xsl:template>
을 folllowing OUPUT는 :
<span class="referenceText">Reference Text 1</span> <a href="1">[1]</a>
<term>Reference Text 2</term> <a href="2">[2]</a>
그래서, <term>
는 <i>
로 변환되지 않습니다. 생성 된 것에 템플릿을 다시 적용하기 위해 재귀가 필요하다고 생각 되나 아무것도 만들 수 없습니다.
내 코드에서이 작업을 수행하는 방법을 보여 줄 수 있습니까? 방금 시도했지만 제대로 작동하지 않는 것 같습니다. 거의 모든 결과 문서가 사라집니다. – snitko
exslt 네임 스페이스를 정의하려면 루트 요소 (또는 다른 곳)에 xmlns : exslt = "http://exslt.org/common"을 추가해야합니다. 어떤 XSLT 프로세서를 사용하고 있습니까? –
'libxslt'을 사용하고 있습니다. 루트 요소에'xmlns : exslt = "exslt.org/common"'을 추가하려고 시도했지만 행운은 없습니다. – snitko