如何将CDATA格式从一个xml转换为另一个?

时间:2018-04-15 09:46:32

标签: java xml xslt

我在xml标签中有这种类型的CDATA:

<?xml version="1.0" encoding="UTF-8"?><Data>
<RawData Format="Text"><![CDATA[
<organizationNameEng>fgfgfg</organizationNameEng>
<organizationNameGeo>dfdfdf</organizationNameGeo>
<organizationIdentifier>123456789</organizationIdentifier>
<cardNumber>dfdfdf</cardNumber>
]]></RawData>
</Data>

我希望粘贴这些数据(以CDATA格式并像这样得到xml)

<?xml version="1.0" encoding="UTF-8"?><DataPrep xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Lcid="String">
<Job Name="CompleteJob" Type="Normal" Priority="1">
<Cards>
<Card>
<RawData Format="Text"><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<organizationName>fgfgfg</organizationNameEng>
<organizationIdentifier>123456789</organizationIdentifier>
<cardNumber>dfdfdf</cardNumber>
]]></RawData>
</Data>
</Card>
</Cards>
</Job>
</DataPrep>
我有这样的xslt:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes"/>
    <xsl:strip-space elements="*"/>

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

    <xsl:template match="Cards/Card">
        <xsl:copy>
            <xsl:for-each select="document('content.xml')">
                <xsl:copy>
                    <xsl:apply-templates select="*"/>
                </xsl:copy>
            </xsl:for-each>
        </xsl:copy>
    </xsl:template>


</xsl:stylesheet>

但是因此我将CDATA格式化为&amp; gt&amp; lt格式,我应该更改哪些以获得理想的结果?

1 个答案:

答案 0 :(得分:0)

您可以使用cdata-section-elements="RawData"上的xsl:output来指定要序列化为CDATA部分的元素

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes" cdata-section-elements="RawData"/>
    <xsl:strip-space elements="*"/>

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

    <xsl:template match="Cards/Card">
        <xsl:copy>
            <xsl:copy-of select="document('content.xml')"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>