读取xml文件时出现空指针异常



我有一个名为xmlReader的类,它有parse(String path)parseXml(Document doc)方法。我定义:

    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());
    }
}

问题:parseXml方法的第3行:

Node id = att.item(0)时,程序得到一个null 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;
}

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

在执行Node id = att.item(0);之前,通过执行System.out.println(first);来查看Node first的对象类型,您可能会发现这是一个文本元素,而不是一个元素。

当你说Node first = doc.getFirstChild().getFirstChild();时,你所做的是"给我第一个元素的第一个子元素,它可能是一个文本元素。你应该做的是检查element节点,这样,只有Node.ELEMENT_NODEgetAttributes():是非null的。"

        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);
            }
        }

最新更新