java - CreateTextNode转义大文本字符串中的字符

标签 java xml createtextnode

字符我试图在 XML 文档文本节点中包含正确的字符:

Element request = doc.createElement("requestnode");
request.appendChild(doc.createTextNode(xml));
rootElement.appendChild(request);

xml 字符串是我读过的一个大 xml 文件的一部分:

Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("rootnode");
doc.appendChild(rootElement);

<firstname>John</firstname>
<dateOfBirth>28091999</dateOfBirth>
<surname>Doe</surname>

问题是,将其传递到 createTextNode 会替换一些章程:

&lt;firstname&gt;John&lt;/firstname&gt;&#13;
&lt;dateOfBirth&gt;28091999&lt;/dateOfBirth&gt;&#13;
&lt;surname&gt;Doe&lt;/surname&gt;&#13;

有什么方法可以在文本节点中保留正确的字符(<、>)。我读过有关使用 importnode 的内容,但这不是正确的 XML,只是文件的一部分。

任何帮助将不胜感激。

编辑:当我构建要导入到 SOAP UI 中的 XML 时,我需要将 xml 字符串(不是完全格式化的 xml,只是外部 xml 文件的一部分)放在“请求节点”中

最佳答案

您无法将元素标签和文本传递给 createTextNode() 方法。您只需要传递文本即可。然后,您需要将此文本节点附加到元素。

如果源是另一个 XML 文档,则必须从一个元素中提取文本节点并将其插入到另一个元素中。您可以抓取一个节点(元素和文本)并尝试将其作为文本节点插入到另一个节点中。这就是为什么您会看到所有转义字符。

另一方面,您可以将此节点插入到其他 XML 中(如果结构允许),应该没问题。

在您的上下文中,我假设“请求”是某种Node。节点的子元素可以是另一个元素、文本等。您必须非常具体。

你可以这样做:

Element name = doc.createElement("name");
Element dob = doc.createElement("dateOfBirth");
Element surname = doc.createElement("surname");

name.appendChild( doc.createTextNode("John") );
dob.appendChild( doc.createTextNode("28091999") );
surname.appendChild( doc.createTextNode("Doe") );

然后您可以将这些元素添加到父节点:

node.appendChild(name);
node.appendChild(dob);
node.appendChild(surname);

更新:作为替代方案,您可以打开文档流并将 XML 字符串作为字节流插入。像这样的东西(未经测试的代码,但接近):

String xmlString = "<firstname>John</firstname><dateOfBirth>28091999</dateOfBirth><surname>Doe</surname>";

DocumentBuilderFactory fac = javax.xml.parsers.DocumentBuilderFactory.newInstance();
DocumentBuilder builder = fac.newDocumentBuilder();
Document newDoc = builder.parse(new ByteArrayInputStream(xmlString.getBytes()));
Element newElem = doc.createElement("whatever");
doc.appendChild(newElem);

Node node = doc.importNode(newDoc.getDocumentElement(), true);
newElem.appendChild(node);

类似的东西应该可以解决问题。

关于java - CreateTextNode转义大文本字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26780782/

相关文章:

java - 如何在 Android Google Analytics V4 中获取 clientId?

java - Android HTTPS 请求与 Volley

sql-server - "XQuery [nodes()]: The XQuery syntax ' 联合 ' is not supported."

JavaScript 传递检索和传递输入信息 nodeValue 与 createTextNode

javascript - 语法错误 : expected expression, 得到 '.'

java - 在 Play 2.6.X 中使用数据库调度程序线程池时出现错误

java - 对象: no thread state can be involved,的序列化对吗?

java - 使用 ScrollView 将 xml 布局多个添加到另一个 xml

java - 将 XML 文件转换为 Java LinkedHashSet