我有以下XML
<title>
This is a <highlight>test</highlight> thanks.
</title>
并希望转换为
<span class="title">this is a <span class="highlight">test</span> thanks.</span>
我试试这个xslt,只能在标题标签内找到文字,我怎样才能转换高亮标签?
<span class="title"><xsl:value-of select="title"/></span>
答案 0 :(得分:4)
<xsl:template match="title">
<span class="title">
<xsl:apply-templates />
</span>
</xsl:template>
<xsl:template match="highlight">
<span class="highlight">
<xsl:apply-templates />
</span>
</xsl:template>
或者,如果您愿意,可将其折叠为单个模板:
<xsl:template match="title|highlight">
<span class="{name()}">
<xsl:apply-templates />
</span>
</xsl:template>
关键点是<xsl:apply-templates />
- 它通过适当的模板运行当前节点的所有子节点。在上部变体中,适当的模板是分开的,在较低的变体中,一个模板是递归调用的。
XSLT中定义了一个复制文本节点的默认规则。所有文本都由<apply-templates>
通过此规则运行,因此文本节点会自动显示在输出中。
答案 1 :(得分:2)
如果您想要节点及其所有子节点的完整副本,请使用xsl:copy-of
代替xsl:value-of
:
<span class="title"><xsl:copy-of select="title"/></span>
但是对于您要做的事情,我会为title
元素创建一个模板,为highlight
元素创建一个模板:
<xsl:template match="title">
<span class="title"><xsl:value-of select="." /></span>
<xsl:apply-templates />
</xsl:template>
<xsl:template match="highlight">
<span class="highlight"><xsl:value-of select="." /></span>
</xsl:template>