XSLT从XML输出html标记

时间:2011-02-03 05:40:51

标签: xml xslt

我有一个类似于:

的XML文档
<tag>
   <content>adsfasdf<b>asdf</b></content>
</tag>

我希望XSLT选择内容元素并显示所有内容:

<xsl:value-of select="/tag/content"/> 

XSLT配置为呈现为HTML。有没有办法让我可以获得值/副本来显示确切的内容而无需渲染它?

我正在寻找的是

asdfasdf<b>asdf</b> 

而不是:

asdfasdf asdf

3 个答案:

答案 0 :(得分:10)

您需要在内容中转义标记名称,我建议使用以下内容:

<xsl:template match="content//*">
    <xsl:value-of select="concat('&lt;',name(),'&gt;')"/>
    <xsl:apply-templates/>
    <xsl:value-of select="concat('&lt;/',name(),'&gt;')"/>
</xsl:template>

然后你可以打电话:

<xsl:apply-templates select="/tag/content"/>

答案 1 :(得分:1)

快速而肮脏的方式:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>

    <xsl:template match="content">
        <xsl:copy-of select="text() | *"/>
    </xsl:template>
</xsl:stylesheet>

针对您的样本的结果将是:

adsfasdf<b>asdf</b>

另一种方法:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>

    <xsl:template match="b">
        <xsl:copy>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

答案 2 :(得分:1)

  

我想让XSLT选择   内容元素并显示所有内容   内容:

<xsl:value-of select="/tag/content"/> 
     

XSLT配置为呈现为   HTML。有没有办法让我得到   要显示的值/副本   确切的内容,而不必渲染   它?

     

我正在寻找的是

asdfasdf<b>asdf</b>
     

而不是:

     

asdfasdf asdf

@ Nick-Jones的回答最接近你想要的。

请查看属于 XPath Visualizer 的XSLT样式表,以获取如何生成任何XML文档的IE样式可折叠显示的广泛示例。

相关问题