2014-12-29 3 views
0

У меня есть узел xml, где я показываю и выбираю конкретный узел для удаления. Для моего ниже xml-файла и кода удаляется только первый узел, хотя я выбираю второй узел.Удаление узла xml не работает должным образом в java с помощью dom parser?

<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

Станислав, спасибо за ур ответ. Я нашел свой ответ, пожалуйста, проверьте ниже. – khanam

0

, если мы хотим, чтобы удалить узел в соответствии с номер узла, затем ниже кода helps.I получил свой ответ от этого

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).

Смежные вопросы