2014-12-29 41 views
0

在這裏我有xml節點,我正在顯示和選擇特定的節點進行刪除。對於我的下面的xml文件和代碼,只有第一個節點正在刪除,但我選擇了第二個節點。xml節點刪除在java中使用dom解析器無法正常工作?

<root> 
<book> <!--node 1 --> 
<id>1111</id> 
<name>abacd</name> 
<author>abcd</author> 
<price>700</price> 
<category>abcd</category> 
</book> 
<book> <!--node 2 --> 
<id>2222</id> 
<name>abacd</name> 
<author>abcd</author> 
<price>700</price> 
<category>abcd</category> 
</book> 
<book> <!--node 3 --> 
    <id>3333</id> 
    <name>abacd</name> 
    <author>abcd</author> 
    <price>700</price> 
<category>abcd</category> 
</book> 
</root> 

和我的Java代碼來刪除節點

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = dBuilder.parse(fXmlFile); 
    int nodeValue = Integer.parseInt(nodeNumber); 
    //nodeValue is node number eg: 2; 
    NodeList bookList = doc.getElementsByTagName("book"); 
    for (int i = 1; i <= bookList.getLength(); i++) { 
     if (i == nodeValue) { 
      Element rootElement = (Element) doc.getElementsByTagName("book").item(0); 
      Element idElement = (Element) doc.getElementsByTagName("id").item(0); 
      idElement.getParentNode().removeChild(idElement); 
      Element nameElement = (Element) doc.getElementsByTagName("name").item(0); 
      nameElement.getParentNode().removeChild(nameElement); 
      Element authorElement = (Element) doc.getElementsByTagName("author").item(0); 
      authorElement.getParentNode().removeChild(authorElement); 
      Element priceElement = (Element) doc.getElementsByTagName("price").item(0); 
      priceElement.getParentNode().removeChild(priceElement); 
      Element categoryElement = (Element) doc.getElementsByTagName("category").item(0); 
      categoryElement.getParentNode().removeChild(categoryElement); 
      rootElement.getParentNode().removeChild(rootElement); 
      doc.normalize(); 
     } 
    } 

可能有人指導我在哪裏可以更改我的代碼。

回答

0

您隨時撥打本

doc.getElementsByTagName("book").item(0); 

的第一個節點而不是嘗試使用

doc.getElementsByTagName("book").item(nodeValue); 

或者使用bookList.item(nodeValue)訪問節點直接

+0

StanislavL,謝謝你的答覆。我發現我的答案請在下面檢查。 – khanam

0

如果我們要根據刪除節點節點編號,然後下面的代碼幫助。我得到了我的回答這

int nodeValue = Integer.parseInt(nodeNumber); 
    NodeList bookList = doc.getElementsByTagName("book"); 
    Node nNode = bookList.item(nodeValue); 
    if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
     Element eElement = (Element) nNode; 
     eElement.getParentNode().removeChild(nNode); 
    } 

它將刪除選定節點(例如:2)。