私はこのようなxmlを持っています:
<span reference="1">Reference Text 1</span>
<term reference="2">Reference Text 2</term>
そして私はこれになるためにそれが必要です:
<span class="referenceText">Reference Text 1</span> <a href="1">[1]</a>
<i>Reference Text 2</i> <a href="2">[2]</a>
したがって、基本的に、reference
属性を持つ要素がスパンである場合は、そのままにして、を追加しclass="referenceText"
ます。ただし、それが他の要素である場合は、この要素用に作成されたテンプレートも適用する必要があります。そういうわけ<term>
でなる必要があります<i>
-私はそれのためのテンプレートを持っています:
<xsl:template match="term">
<i><xsl:apply-templates select="@* |node()"/></i>
</xsl:template>
属性を持つすべての要素の変換のために、reference
私はこのテンプレートを持っています:
<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>
残念ながら、これにより次の出力が生成されます。
<span class="referenceText">Reference Text 1</span> <a href="1">[1]</a>
<term>Reference Text 2</term> <a href="2">[2]</a>
したがって、に<term>
変換されません<i>
。生成されたものにテンプレートを再適用するには、ある種の再帰が必要なようですが、何も思いつきません。