2011-07-09 96 views
0

我得到一個錯誤,當我跑我的XML閱讀器的開頭:Java的XML閱讀器的錯誤

public static void main(String[] args) 
{ 
    System.out.println("XML Reader"); 

    try 
    { 
     DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
     Document doc = docBuilder.parse("database.xml"); 

     //normalize text 
     doc.getDocumentElement().normalize(); 
     System.out.println("The root of this doc is "+doc.getDocumentElement().getNodeName()); 

     NodeList listOfAddresses = doc.getElementsByTagName("address"); 
     int totalAddresses = listOfAddresses.getLength(); 
     System.out.println(totalAddresses+" addresses in "+ doc.getDocumentElement().getNodeName()); 

     //main loop 
     for(int i = 0; i<listOfAddresses.getLength(); i++) 
     { 
      Node items = listOfAddresses.item(i); 

      if(items.getNodeType() == Node.ELEMENT_NODE) 
      { 
       System.out.println("Address #"+i); 

       Element element = (Element)items; 

       NodeList nameList = element.getElementsByTagName("name"); 
       Element nameElement = (Element)nameList.item(0); 
       NodeList nameOutput = nameElement.getChildNodes(); 


       System.out.println("name: "+nameElement); 
      } 
     } 


    } 

    catch(SAXParseException err) 
    { 
     System.out.println("Sax Parse Exception error on line "+err.getLineNumber()); 
    } 

    catch(SAXException e) 
    { 
     System.out.println("SAX Exception error"); 
     Exception x = e.getException(); 
     ((x == null) ? e : x).printStackTrace(); 
    } 

    catch(Throwable t) 
    { 
     System.out.println("Trowable error"); 
     t.printStackTrace(); 
    } 
} 

NetBeans是給我下面的輸出:

 
run: 
XML Reader 
The root of this doc is database 
2 addresses in database 
java.lang.NullPointerException 
Address #0 
Trowable error 
    at xmlreader.XMLreader.main(XMLreader.java:42) 

有人能幫助我這個出來嗎?

+2

,什麼線是線42?知道這可能會幫助我們。 – fvu

+0

源始終注意哪一行異常發生。 –

回答

2

你不檢查,如果有一個元素0從本質上講,.item()將返回null如果索引是無效的,因爲這樣有可能與指數0,返回null,然後一個項目你嘗試在空指針上調用getChildNodes()。因此你的NPE。

你應該比在節點列表中的元素進行迭代。

變化

Element nameElement = (Element)nameList.item(0); 

for(int x = 0; x < nameList.getLength(); x++) { 
    nameElement = nameList.item(x); 
    NodeList nameOutput = nameElement.getChildNodes(); 
    System.out.println("name: "+nameElement); 
}