我有一个像这样的xml结构
<root>
<element>
<Heading>
This is the Header
</Heading>
<Content>
<Region>
<Section>
<Paragraph>
The last two lines define the end of the template and the end of the style sheet.
</Paragraph>
</Section>
</Region>
</Content>
</elememt>
</root>
现在我必须使用xsl将其渲染为html。标题很简单。但困难的部分是内容。我得到的输出是由像这样的标签包围的文本
<Region><Section><Paragraph>The last two lines define the end of the template and the end of the style sheet.</Paragraph></Section></Region>
我该如何解决这个问题?我绝对不知道。欢迎任何帮助。感谢所有提前。
答案 0 :(得分:0)
使用 parse-xml-fragment()
的 XSLT 3.0 解决方案:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0">
<xsl:output method="html" indent="yes" />
<xsl:template match="/">
<xsl:apply-templates select="root/element/Content"/>
</xsl:template>
<xsl:template match="Content">
<xsl:copy-of select="parse-xml-fragment(.)" />
</xsl:template>
</xsl:stylesheet>
使用 xsl:character-map
的 XSLT 2.0 解决方案:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="html" use-character-maps="angle-brackets" indent="yes" />
<xsl:character-map name="angle-brackets">
<xsl:output-character character="<" string="<"/>
<xsl:output-character character=">" string=">"/>
</xsl:character-map>
<xsl:template match="/">
<xsl:apply-templates select="root/element/Content"/>
</xsl:template>
<xsl:template match="Content">
<xsl:value-of select="." />
</xsl:template>
</xsl:stylesheet>
使用 disable-output-escaping
的 XSLT 1.0 解决方案:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html" indent="yes" />
<xsl:template match="/">
<xsl:apply-templates select="root/element/Content"/>
</xsl:template>
<xsl:template match="Content">
<xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:template>
</xsl:stylesheet>