2014-12-26 4 views
0

Здесь я имею структуру XML, какудалить узел xml на основе номера узла с помощью java?

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

На основе числа узлов, мне нужно, чтобы удалить этот узел целиком. Я могу получить номер узла и все дочерние узлы, но я не знаю, как deltet, может ли кто-нибудь вести меня, как это сделать.eg:node 0. необходимо удалить. Это то, что я пытался узел-не удалю:

File fXmlFile = new File(xmlfilePath); 
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = dBuilder.parse(fXmlFile); 
    NodeList nList = doc.getElementsByTagName("book"); 
    Node nNode = nList.item(Integer.parseInt(nodeNumber)); 
    if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
     Element eElement = (Element) nNode; 
     String id = eElement.getElementsByTagName("id").item(0).getTextContent(); 
     if ((id.equals(bookId))) { 
      eElement.getElementsByTagName("id").item(0).removeChild(nNode); 
     } 
    } 

, пожалуйста, помогите мне, чтобы получить желаемый результат.

+0

здесь вы идете http://stackoverflow.com/questions/3717215/remove-xml-node-using-java-parser – ppuskar

+0

@ ppuskar, я не хочу использовать XPathFactory XPF = XPathFactory. newInstance(); XPath xpath = xpf.newXPath(); XPathExpression expression = xpath.compile ("// A/B [C/E/text() = 13]"); пожалуйста, направляйте меня – khanam

ответ

0

В вашем XML отсутствует корневой элемент. Вот моя исправленная версия:

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

Вот тест JUnit с помощью XMLBeam

public class DeleteNodeTest { 

public interface Books { 
    @XBDelete("//book[id=$PARAM0]") 
    int deleteBooks(int id); 
} 

@Test 
public void deleteNode() throws IOException { 
    Books books = new XBProjector(Flags.TO_STRING_RENDERS_XML).io().url("resource://test.xml").read(Books.class); 
    System.out.println("Deleted " + books.deleteBooks(1111) + " nodes."); 
    System.out.println(books); 
} 

}

Эта программа печатает:

Deleted 1 nodes. 

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