2009-09-16 71 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