java - 如何将 CDATA 格式从一种 xml 转换为另一种?

标签 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 格式为 > < 格式我应该更改什么才能获得理想的结果?

最佳答案

您可以在 xsl:output 上使用 cdata-section-elements="RawData" 来指定要序列化为 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>

关于java - 如何将 CDATA 格式从一种 xml 转换为另一种?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49840559/

相关文章:

java - 向 CustomUsersCredentials 添加新密码,是好主意还是坏主意?

php - 从嵌入在html中的xml中提取xml

xml - XSLT如何基于元素进行合并

c# - 给定的路径格式不支持 c#

java - Ant 类路径 - Hibernate 创建的类无法导入其他包

java - 将 .so 文件导入 android studio 时出错

java - 在 Eclipse 中使用远程 git 资源来创建可运行的 java 项目

xml - Scala:XML 属性解析

php - 在元素的属性上保留前缀

xml - 除 for-each 之外,哪些 XSLT 指令会更改当前节点?