我正在使用XSLT将XML转换为HTML。
我有以下XML结构:
<root>
<element>
<subelement>
This is some html text which should be <span class="highlight">displayed highlighted</span>.
</subelement>
</element>
</root>
我使用以下模板进行转换:
<xsl:template name="subelement">
<xsl:value-of select="." />
</xsl:template>
不幸的是,我丢失了<span>
- 标签。
有没有办法保留它们以便正确显示HTML(突出显示)?
答案 0 :(得分:31)
获取当前匹配节点(包括文本节点)的所有内容的正确方法是:
<xsl:template match="subelement">
<xsl:copy-of select="node()"/>
</xsl:template>
这将复制所有后代。
答案 1 :(得分:5)
尝试使用<xsl:copy-of...
代替<xsl:value-of...
,例如:
<xsl:template name="subelement">
<xsl:copy-of select="*" />
</xsl:template>
注意*
将阻止<subelement></subelement>
位输出到结果,而不是使用包含.
位的<subelement></subelement>
。
例如,xsl样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="root/element">
<output>
<xsl:apply-templates select="subelement"/>
</output>
</xsl:template>
<xsl:template match="subelement">
<xsl:copy-of select="*"/>
</xsl:template>
</xsl:stylesheet>
当应用于您的示例xml文件时返回:
<?xml version="1.0" encoding="UTF-8"?>
<output>
<span class="highlight">displayed highlighted</span>
</output>
答案 2 :(得分:0)
<xsl:value-of>
声明按顺序获取元素中所有文本节点的连接内容,并且根本不输出任何元素。
我建议改用<xsl:apply-templates>
。在找到文本节点的地方,它将按原样输出内容,但您需要定义一个模板来处理span标记以将其转换为html标记。如果该span标记是一个html标记,那么严格来说,你应该为你自己的文档结构和html分别设置名称空间。