characters我正在尝试在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正在取代一些章程:
<firstname>John</firstname>
<dateOfBirth>28091999</dateOfBirth>
<surname>Doe</surname>
我有什么方法可以在textnode中保留正确的字符(&lt;,&gt;)。我已经阅读了有关使用importnode的内容,但这不是正确的XML,只是文件的一部分。
非常感谢任何帮助。
编辑:我需要将xml字符串(不是完全格式化的xml,只是外部xml文件的一部分)放在“请求节点”中,因为我正在构建要导入SOAP UI的XML
答案 0 :(得分:2)
您无法将元素标记和文本传递给createTextNode()
方法。您只需要传递文本。然后,您需要将此文本节点附加到元素。
如果源是另一个XML文档,则必须从元素中提取文本节点并将其插入到另一个元素中。您可以获取节点(元素和文本)并尝试作为文本节点插入另一个节点。这就是你看到所有转义字符的原因。
另一方面,您可以将此节点插入另一个XML(如果允许结构),它应该没问题。
在您的上下文中,我假设“请求”是某种Node
。 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);
UPDATE :作为替代方案,您可以打开文档流并将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);
这样的事情应该可以解决问题。