如何在java中的某个元素之后/之前将元素插入到xml中
这是我的代码,也许你会马上注意到我缺少的东西:
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = domFactory.newDocumentBuilder(); Document doc = builder.parse(fileName)); XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); XPathExpression expr = xpath.compile("//CustomerId"); Object result = expr.evaluate(doc, XPathConstants.NODESET); Nodelist nodes = (NodeList) result; Text a = doc.createTextNode("value"); Element p = doc.createElement("newNode"); p.appendChild(a); for (int i = 0; i < nodes.getLength(); i++) { nodes.item(i).insertBefore(p, nodes.item(i)); }
我正在尝试在CustomerId现有节点之前插入新节点( value
)。 这是我的XML示例文件:
fName lName nName 22 Street base name kewl district 22231 xxx xxxz true 561381 123123123 21319414 true
这是一个抛出的exception我只是不知道还有什么可以尝试:
NOT_FOUND_ERR:尝试在不存在的上下文中引用节点。
这里是我刚刚使用您提供的xml示例测试的示例。
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setIgnoringComments(true); DocumentBuilder builder = domFactory.newDocumentBuilder(); Document doc = builder.parse(new File("XmlTest.xml")); NodeList nodes = doc.getElementsByTagName("CustomerId"); Text a = doc.createTextNode("value"); Element p = doc.createElement("newNode"); p.appendChild(a); nodes.item(0).getParentNode().insertBefore(p, nodes.item(0));
结果如下:
fName lName nName 22 Street base name kewl district 22231 xxx xxxz true value 561381 123123123 21319414 true
如果您有兴趣,这是我用来显示结果的示例代码:
Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); StreamResult result = new StreamResult(new StringWriter()); DOMSource source = new DOMSource(doc); transformer.transform(source, result); String xmlOutput = result.getWriter().toString(); System.out.println(xmlOutput);
我想你要插入父母,而不是孩子:
nodes.item(i).getParentNode().insertBefore(p, nodes.item(i));