如何在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));