如何使用xsl呈现xopus生成的xml

时间:2014-11-21 12:42:25

标签: xml xslt

我有一个像这样的xml结构

<root>
    <element>
        <Heading>
            This is the Header
        </Heading>
        <Content>
            &lt;Region&gt;
                &lt;Section&gt;
                    &lt;Paragraph&gt;
                        The last two lines define the end of the template and the end of the style sheet.
                &lt;/Paragraph&gt;
                &lt;/Section&gt;
            &lt;/Region&gt;
        </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>

我该如何解决这个问题?我绝对不知道。欢迎任何帮助。感谢所有提前。

1 个答案:

答案 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="&lt;" string="&lt;"/>
    <xsl:output-character character="&gt;" string="&gt;"/>
</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>