将节点附加到现有的xml-Java

我已经看到了针对vb和c#的相同问题,但是我需要一个Java最佳解决方案来将节点附加到xml。 请问xpath有帮助吗? 我有

  1 2 3   1 2 3   

需要追加另一个

  11 21 31  

XPath将帮助您查找节点,但不会真正附加它们。 我不认为你在这里发现它特别有用。

您使用的是哪种XML API? 如果它是W3C DOM(urgh)那么你会做类似的事情:

 Element newB = document.createElement("B"); Element newC = document.createElement("c"); newC.setTextContent("11"); Element newD = document.createElement("d"); newD.setTextContent("21"); Element newE = document.createElement("e"); newE.setTextContent("31"); newB.appendChild(newC); newB.appendChild(newD); newB.appendChild(newE); document.getDocumentElement().appendChild(newB); 

最直接的方法是使用SaxDom将所有文件解析为数据结构,例如A类,其中包含一个B类,其中包含C,D,E类的成员。

并将数据结构输出回XML。

您可能希望使用vtd-xml的XMLModier以一种很酷的方式执行它,即直接附加字节内容…您只需要调用XMLModier的insertAfterElement()…下面是代码示例的链接: 在Java中增量修改XML :

 import com.ximpleware.*; import java.io.*; public class ModifyXML { public static void main(String[] s) throws Exception{ VTDGen vg = new VTDGen(); // Instantiate VTDGen XMLModifier xm = new XMLModifier(); //Instantiate XMLModifier if (vg.parseFile("old.xml",false)){ VTDNav vn = vg.getNav(); xm.bind(vn); // first update the value of attr int i = vn.getAttrVal("attr"); if (i!=-1){ xm.updateToken(i,"value"); } // navigate to  if (vn.toElement(VTDNav.FC,"a")) { // update the text content of  i=vn.getText(); if (i!=-1){ xm.updateToken(i," new content "); } // insert an element before  (which is the cursor element) xm.insertBeforeElement("\n\t"); // insert an element after  (which is the cursor element) xm.insertAfterElement("\n\t"); } xm.output(new FileOutputStream("new.xml")); } } }