2012-01-09 18 views
0

私はparse(String path)parseXml(Document doc)メソッドを持つxmlReaderという名前のクラスを持っています。 は私が定義: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)プログラムがnull参照の例外を取得する場合。デバッグ時には、文書がnullと定義されています。何故ですか? そのように、ファイルが正しく読み込まれません。

ありがとうございます。

この

は私の解析(文字列のパス)メソッドです:あなたはこの Node id = att.item(0);System.out.println(first);を行うことによって Node firstのオブジェクト型を見てくださいする前に

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

+3

PATHが正しいかあなたが確かにある – kosa

+0

? 'doc'が' null'の場合、問題は 'doc = reader.parse(PATH);であり、あなたのメソッドではありません。 –

答えて

3

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

を見てみましょうあなたのこれはおそらく要素ではなくテキスト要素であることがわかります。

Node first = doc.getFirstChild().getFirstChild();が「最初の要素の最初の子を教えてくれます。これはおそらくテキスト要素です。これはELEMENTノードのチェックです。Node.ELEMENT_NODEには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); 
      } 

     } 
関連する問題