Java Transformer如何在CDATA中保留xml结构

问题描述 投票:0回答:1

[当我尝试使用javax.xml.transform.Transformer转换文档时,API在CDATASection内部的标签之间插入了一些空格。

不确定,为什么我已经将输出属性INDENT用作“ no”


我想要这个:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <infoDoc>
        <xml1><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<el1>
    <Header>
        <Success>false</Success>
    </Header>
    <Detail>
        <Key>
            <Number>4721</Number>
        </Key>
    </Detail>
</el1>]]></xml1>
    </infoDoc>
</root>

或此:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <infoDoc>
        <xml1><![CDATA[<?xml version="1.0" encoding="UTF-8"?><el1><Header><Success>false</Success></Header><Detail><Key><Number>4721</Number></Key></Detail></el1>]]></xml1>
    </infoDoc>
</root>

但是我收到这个:

<?xml version="1.0" encoding="UTF-8"?><root><infoDoc><xml1><![CDATA[<?xml version="1.0" encoding="UTF-8"?>

<el1>

    <Header>

        <Success>false</Success>

    </Header>

    <Detail>

        <Key>

            <Number>4721</Number>

        </Key>

    </Detail>

</el1>]]></xml1></infoDoc></root>

是否还有另一个属性可以做到这一点?

或另一个API,可以做到吗?

编辑:我使用如下:

...
final Element xml1 = doc.createElement("xml1");
final CDATASection xml1Content = doc.createCDATASection(new String(bytes, Charset.forName(encoding)));
xml1.appendChild(xml1Content);
infoDoc.appendChild(xml1);
...


...
final DOMSource source = new DOMSource(document);
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
transformer.setOutputProperty(OutputKeys.ENCODING, encoding);
transformer.setOutputProperty(OutputKeys.INDENT, "no");
transformer.transform(source, result);
...
java xml cdata removing-whitespace transformer
1个回答
0
投票

有同样的问题。似乎是Windows问题,该解决方案为我工作:https://stackoverflow.com/a/57887883/2285846

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.