2012-01-09 59 views
0

我有一個名爲xmlReader的類,它有parse(String path)parseXml(Document doc)方法。 我定義:讀取xml文件時空指針異常

xmlReader reader = new xmlReader(); 
    Document doc = reader.parse(PATH); 
    reader.parseXml(doc);` 

parseXml方法:

public void parseXml(Document doc) 
{ 
    Node first = doc.getFirstChild().getFirstChild(); 
    NamedNodeMap att = first.getAttributes(); 
    Node id = att.item(0); 
    NodeList l = first.getChildNodes(); 
    System.out.println("id:" + id.getNodeValue()); 
    for(int i = 0; i < l.getLength(); i++) 
    { 
     Node temp = l.item(i); 
     System.out.println(temp.getNodeName() + ": " + 
       temp.getNodeValue()); 
    } 

} 

問題:3號線parseXml的方法:

Node id = att.item(0)程序得到一個空REF例外。在調試時,我發現文檔被定義爲null。這是爲什麼? 它就像它沒有正確讀取文件。

謝謝?

這是我的解析(字符串路徑)方法:

public Document parse(String path) 
{ 
DocumentBuilderFactory dbf = 
DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = null; 

try 
{ 
    db = dbf.newDocumentBuilder(); 
} catch (ParserConfigurationException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
Document doc = null; 
try 
{ 
    doc = db.parse(path); 
} catch (SAXException e) { 

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

    e.printStackTrace(); 
} 
return doc; 
} 
+3

「這就像它無法正確讀取該文件。」嗯,也許它不能正確讀取該文件你怎麼知道這不是問題 – Paul 2012-01-09 22:08:53

+3

你確定路徑是正確的 – kosa 2012-01-09 22:09:31

+0

。?如果'doc'爲'null',那麼確實問題出在'doc = reader.parse(PATH);'不適用於你的方法。 – 2012-01-09 22:15:52

回答

3

看看http://docs.oracle.com/javase/1.5.0/docs/api/org/w3c/dom/Node.html#getAttributes()

在你做這個Node id = att.item(0);看一看的Node first對象類型做System.out.println(first);您可能會看到這是一個文本元素而不是元素。

當你說Node first = doc.getFirstChild().getFirstChild();時你所做的是「給我第一個元素的第一個孩子,它可能是一個文本元素。你應該做的是檢查這樣的ELEMENT節點,只有Node.ELEMENT_NODE將不具有非-null爲getAttributes()

 NodeList nl = doc.getFirstChild().getChildNodes(); 
     for (int i = 0; i < nl.getLength(); i++){ 
      Node first = nl.item(i); 
      if (first.getNodeType() == Node.ELEMENT_NODE){ 
       System.out.println("first:" + first); 
       NamedNodeMap att = first.getAttributes(); 
       System.out.println("att:" + att); 
      } 

     }