2011-07-09 69 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); 
}