2011-08-03 110 views
0

我有一個基本的XML文檔的設置是這樣的:插入節點作爲第一個孩子總是

<rss> 
     <channel> 
     </channel> 
</rss> 

我想補充的渠道作爲第一個節點的新的子節點,所以,說我通過循環項目的集合,那麼第一個項目將被添加像這樣:

<rss> 
     <channel> 
      <item>Item 1</item> 
     </channel> 
</rss> 

然後下一個項目將增加像這樣:

<rss> 
     <channel> 
      <item>Item 2</item> 
      <item>Item 1</item> 
     </channel> 
</rss> 

我一直在嘗試使用:

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
Document doc = docBuilder.parse(new File(xmlFile)); 

Element itemNode = doc.createElement("item"); 
Node channelNode = doc.getElementsByTagName("channel").item(0); 
channelNode.appendChild(itemNode); 

但它不斷增加新的項目到列表的底部。

回答

2
channelNode.appendChild(itemNode); 

總是將itemNode追加到的channelNode孩子的列表的末尾。這是行爲在DOM Level 3的規範定義,並在the JAXP documentation還有:

節點的appendChild(節點newChild對象) 拋出拋出:DOMException

 Adds the node newChild to the end of the list of children of this 
node (emphasis mine). If the newChild is already in the tree, it is first removed.

如果您需要在加子節點列表的開頭部分,可以用insertBefore() API方法代替:

channelNode.insertBefore(itemNode, channelNode.getFirstChild()); 
+0

謝謝。任何我更改爲insertBefore後出現此錯誤的原因? channelNode和itemNode不爲空。 org.apache.harmony.xml.dom.InnerNodeImpl.insertBefore(InnerNodeImpl.java:86)java.lang.NullPointerException –

+0

沒關係,代碼錯誤。它正在工作。謝謝! –

+1

它應該是channelNode.firstChild而不是channelNode.getFirstChild()。 – Zo72

相關問題