gpt4 book ai didi

java - 生成 XML 时如何在 CDATA 中保留换行符?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:26 26 4
gpt4 key购买 nike

我想将一些包含空白字符的文本写入 xml 文件中,例如 newlinetab 所以我使用

Element element = xmldoc.createElement("TestElement");
element.appendChild(xmldoc.createCDATASection(somestring));

但是当我在使用中读回这篇文章时

Node vs =  xmldoc.getElementsByTagName("TestElement").item(0);
String x = vs.getFirstChild().getNodeValue();

我得到一个不再有换行符的字符串。
当我直接查看磁盘上的 xml 时,换行符似乎保留了下来。所以在读取xml文件时出现问题。

如何保留换行符?

谢谢!

最佳答案

我不知道你是如何解析和编写你的文档的,但这里有一个基于你的增强代码示例:

// creating the document in-memory                                                        
Document xmldoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();

Element element = xmldoc.createElement("TestElement");
xmldoc.appendChild(element);
element.appendChild(xmldoc.createCDATASection("first line\nsecond line\n"));

// serializing the xml to a string
DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance();

DOMImplementationLS impl =
(DOMImplementationLS)registry.getDOMImplementation("LS");

LSSerializer writer = impl.createLSSerializer();
String str = writer.writeToString(xmldoc);

// printing the xml for verification of whitespace in cdata
System.out.println("--- XML ---");
System.out.println(str);

// de-serializing the xml from the string
final Charset charset = Charset.forName("utf-16");
final ByteArrayInputStream input = new ByteArrayInputStream(str.getBytes(charset));
Document xmldoc2 = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(input);

Node vs = xmldoc2.getElementsByTagName("TestElement").item(0);
final Node child = vs.getFirstChild();
String x = child.getNodeValue();

// print the value, yay!
System.out.println("--- Node Text ---");
System.out.println(x);

使用 LSSerializer 的序列化是 W3C 的方式(see here)。输出符合预期,带有行分隔符:

--- XML --- 
<?xml version="1.0" encoding="UTF-16"?>
<TestElement><![CDATA[first line
second line ]]></TestElement>
--- Node Text ---
first line
second line

关于java - 生成 XML 时如何在 CDATA 中保留换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1216875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com