2014-12-26 3 views
0

여기에 나는 전적으로 해당 노드를 삭제해야 노드 수에 따라java를 사용하여 노드 번호를 기반으로 xml 노드를 제거 하시겠습니까?

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

으로 XML 구조를 가지고있다. 노드 번호와 모든 자식 노드를 가져올 수 있지만 deltet하는 방법을 알지 못합니다. 아무에게도 it.eg:node 0을 수행하는 방법을 안내 할 수는 없습니다. 삭제해야합니다. 이 내가 노드 0 delet하려고 무엇을 :

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

여기 당신은 내가 XPathFactory를 XPF = XPathFactory를 사용하려는 해달라고, ppuskar http://stackoverflow.com/questions/3717215/remove-xml-node-using-java-parser – ppuskar

+0

@ 이동합니다. newInstance(); XPath xpath = xpf.newXPath(); XPathExpression expression = xpath.compile ("// A/B [C/E/text() = 13]"); 나를 안내 해주세요. – khanam

답변

0

XML에 루트 요소가 없습니다. 여기 내 수정 된 버전 : JUnit 테스트 여기

<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> 
사용 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>