2009-09-16 57 views
4

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

<A> 
    <B> 
    <c>1<c/> 
    <d>2<d/> 
    <e>3<e/> 
    </B> 
    <B> 
    <c>1<c/> 
    <d>2<d/> 
    <e>3<e/> 
    </B> 
</A> 

需要附加其他

<B> 
    <c>11<c/> 
    <d>21<d/> 
    <e>31<e/> 
</B> 

回答

13

的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); 
+0

并设置c,d,e值? – Ajay 2009-09-16 06:23:58

+0

编辑...尽管如果您想了解如何在这些元素中创建内容,在问题中这样说会很有用。 – 2009-09-16 06:36:10

+0

抱歉...已经完成了!..感谢您的回复 – Ajay 2009-09-16 06:40:12

2

最两岸转发方式是你解析,使用萨克斯大教堂,所有的文件到数据结构,例如一个A类,在你的情况下,它有一个B类,C,D,E类的成员。

并将数据结构输出回XML。

0

您可能希望使用XMLMODIER的vtd-xml来以一种很酷的方式来完成它,它直接追加字节内容......您只需调用XMLModier的insertAfterElement()... 下面是一个链接代码示例:Incrementally Modify XML in Java

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 <a> 
      if (vn.toElement(VTDNav.FC,"a")) { 
        // update the text content of <a> 
        i=vn.getText(); 
        if (i!=-1){ 
         xm.updateToken(i," new content "); 
        } 
        // insert an element before <a> (which is the cursor element) 
        xm.insertBeforeElement("<b/>\n\t"); 

        // insert an element after <a> (which is the cursor element) 
        xm.insertAfterElement("\n\t<c/>"); 
      } 

      xm.output(new FileOutputStream("new.xml")); 
     } 
    } 

} 
+1

你介意加入为什么这是一个很酷的方式吗?这听起来与我所听过的任何事情都是相反的。此外,为什么这回答社区Wiki? – 2009-09-25 21:20:01

+0

它很酷,因为它是直接字节级别追加,而不是数据strcuture级别追加......我想我解释说,在我的帖子中......“附加字节内容” – 2009-09-26 01:04:01

+0

是的,你只是没有说明为什么字节级别append是很酷的,而不是简单的一个坏主意,它使代码依赖于XML文档的编码。 – 2009-09-28 23:33:51