2016-03-22 11 views
0

derzeit bin ich aufgefordert, einen bestimmten Knoten und seine Kind in einer XML-Datei zu entfernen, aber ich habe immer Null Zeiger Ausnahme gefunden, wenn ich versuche, die Knoten zu entfernen. Der "position" -Parameter wäre die Anzahl der zu entfernenden Knoten. Zum Beispiel sollte Position 3 Reservierungs-ID (04113049) und alles darunter entfernen.Probleme beim Entfernen von Knoten aus XML-Datei mit Java

public void removeReservation(int position){ 

    try{ 

     File file = new File("reservations.xml"); 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse(file); 
     Element element = (Element)doc.getElementsByTagName("reservation").item(position); 
     element.getParentNode().removeChild(element); 

     TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
     Transformer transformer = transformerFactory.newTransformer(); 
     DOMSource source = new DOMSource(doc); 

     StreamResult result = new StreamResult(new File("reservations.xml")); 
     transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
     transformer.transform(source, result); 


    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

Hier der Inhalt der XML-Datei sind:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<data> 
<reservation_list> 

<reservation> 
<resID>01014664</resID> 
<roomNo>0101</roomNo> 
<roomType>VIPSuite</roomType> 
<noOfGuest>3</noOfGuest> 
<bedType>Master</bedType> 
<smoking>Y</smoking> 
<startDate>121313</startDate> 
<endDate>121316</endDate> 
<wifi>Y</wifi> 
<roomView>Y</roomView> 
<availability>Reserved</availability> 
<name>Johnny depp</name> 
<address>NTU Hall 17 #01-111</address> 
<country>Singapore</country> 
<gender>Male</gender> 
<nationality>Singaporean</nationality> 
<contact>92003239</contact> 
<creditCardNo>1234567812345678</creditCardNo> 
<creditCardCSV>432</creditCardCSV> 
<creditCardExpDate>11/16</creditCardExpDate> 
<identity>U0000000I</identity> 
</reservation> 

<reservation> 
<resID>11025652</resID> 
<roomNo>1102</roomNo> 
<roomType>Double</roomType> 
<noOfGuest>3</noOfGuest> 
<bedType>Master</bedType> 
<smoking>Y</smoking> 
<startDate>1212</startDate> 
<endDate>1213</endDate> 
<wifi>Y</wifi> 
<roomView>Y</roomView> 
<availability>Reserved</availability> 
<name>Thomas</name> 
<address>Mountbatten #2-12 Garden ave</address> 
<country>Singapore</country> 
<gender>Male</gender> 
<nationality>Singaporean</nationality> 
<contact>93482032</contact> 
<creditCardNo>1234567812345678</creditCardNo> 
<creditCardCSV>588</creditCardCSV> 
<creditCardExpDate>3/16</creditCardExpDate> 
<identity>U1234567I</identity> 
</reservation> 

<reservation> 
<resID>04113049</resID> 
<roomNo>0411</roomNo> 
<roomType>VIPSuite</roomType> 
<noOfGuest>7</noOfGuest> 
<bedType>Master</bedType> 
<smoking>Y</smoking> 
<startDate>121112</startDate> 
<endDate>232333</endDate> 
<wifi>Y</wifi> 
<roomView>Y</roomView> 
<availability>Reserved</availability> 
<name>elaine</name> 
<address>punggol</address> 
<country>Singapore</country> 
<gender>Female</gender> 
<nationality>Singaporean</nationality> 
<contact>12345672</contact> 
<creditCardNo>1234123412341234</creditCardNo> 
<creditCardCSV>123</creditCardCSV> 
<creditCardExpDate>1212</creditCardExpDate> 
<identity>S96777777777F</identity> 
</reservation> 
</reservation_list> 
</data> 
+0

Beachten Sie, dass die 'index' Argument' NodeList.item (Index) 'Null-basiert, so dass das dritte Element zu erhalten, müssen Sie' doc.getElementsByTagName ("Reservierung") tun. Punkt (2) '. –

Antwort

1

Zuerst Filterung Element mit() Null-Basis (beginnt ab dem Index 0), gibt es keinen Punkt (3) in der Datei.

Zweitens sollten Sie immer überprüfen, ob Sie eine Reservierung für diese Position finden können, bevor Sie versuchen, sie zu entfernen. In Ihrem Fall denke ich, dass Sie versuchen, .getParentNode() für ein Null-Element auszuführen, weshalb Sie den NullPointer sehen.

Element element = (Element)doc.getElementsByTagName("reservation").item(position); 
if (null != element) { 
    element.getParentNode().removeChild(element); 
    //etc 
    } 
Verwandte Themen