我有一个名为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)
程序获得空引用异常时。调试时,我看到doc已定义null
。这是为什么?
它就像没有正确读取文件一样。
感谢?
这是我的解析(String path)方法:
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;
}
答案 0 :(得分: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节点,只有{ {1}} Node.ELEMENT_NODE
getAttributes()