我可以使用xsl将CDATA转换为剥离版本吗?我的意思是unCDATA的内容

时间:2012-03-14 15:39:19

标签: xml xslt cdata

我有此消息具有CDATA内容。我想把它变成unCDATA格式,例如:

<?xml version="1.0" encoding="UTF-8"?>
<mymessage <![CDATA[<xyz>1234</xyz>]]></mymessage>

turn into 

<?xml version="1.0" encoding="UTF-8"?>
<mymessage &lt;xyz>1234&lt;/xyz></mymessage>

所以我想摆脱CDATA并将我的消息转换为剥离版本。任何人都知道如何使用xsl来做到这一点?或者可以在xsl中做这样的事情吗?

2 个答案:

答案 0 :(得分:1)

默认情况下,符合要求的XSL处理器可以满足您的要求。如果要保留实际必须添加的CDATA部分

<xsl:output cdata-section-elements="mymessage"/>

到样式表

答案 1 :(得分:0)

您甚至可以通过应用以下内容来避免转义字符(当CDATA中的正确xml节点阻塞时!):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format"
    xmlns:dt="http://exslt.org/dates-and-times"
    xmlns:exsl="http://exslt.org/common"
    extension-element-prefixes="dt exsl">

    <xsl:output method="xml" encoding="utf-8" indent="yes"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="text()">
        <xsl:value-of select="." disable-output-escaping="yes"/>
    </xsl:template>

</xsl:stylesheet>

,当应用于

<?xml version="1.0" encoding="UTF-8"?>
<mymessage><![CDATA[<xyz>1234</xyz>]]></mymessage>

给出

<?xml version="1.0" encoding="utf-8"?>
<mymessage><xyz>1234</xyz></mymessage>

一般情况下,一般情况下不建议这样做(因为CDATA块被放置在那里),所以最好省略模板匹配文本()。在这种情况下,结果将是

<?xml version="1.0" encoding="utf-8"?>
<mymessage>&lt;xyz&gt;1234&lt;/xyz&gt;</mymessage>