2011-07-09 11 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) 

誰かが私はこの1つを理解する助けてもらえでる?

+2

に、どのような行が42行ありますか?それが私たちを助けるかもしれないことを知る。 – fvu

+0

例外が発生した行は常にソースに記録してください。 –

答えて

2

要素0が存在するかどうかはチェックしていません。インデックスが有効でない場合、.item()はnullを返します。 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); 
} 
関連する問題