Java-XML NodeList.item()抛出NullPointerException
当我使用SAXParser解析Android XML布局并通过NodeList读取元素项时,我得到了NPEJava-XML NodeList.item()抛出NullPointerException,java,xml,sax,saxparser,Java,Xml,Sax,Saxparser,当我使用SAXParser解析Android XML布局并通过NodeList读取元素项时,我得到了NPE NodeList list = e.getChildNodes(); // e is Element for(int i = 0; i < list.getLength(); i++) { Node node = list.item(i); if(node == null) { continue; } if(node.getNodeTy
NodeList list = e.getChildNodes(); // e is Element
for(int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
if(node == null) {
continue;
}
if(node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
// process somehow it
}
}
那为什么会这样呢?如何避免此异常并只读取元素数据
UPD:
有时NPE会在getLength()中抛出:
UPD 2:
全身
public List<DomElement> getChildNodes() {
ArrayList<DomElement> elements = new ArrayList<DomElement>();
NodeList list = e.getChildNodes();
for(int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
if(node == null) {
continue;
}
if(node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
elements.add(new DomElement(doc, element));
}
}
return elements;
}
公共列表getChildNodes(){
ArrayList元素=新的ArrayList();
NodeList list=e.getChildNodes();
对于(int i=0;i//进程是否以某种方式处理它
代码可能会在迭代节点列表时修改DOM树
?不,它不会改变任何东西。我有一个类是围绕元素的包装器。它为我提供了更漂亮的界面。我发送的方法实际上是读取内部DOM元素(我在第一条消息中添加了完整的代码),我有完全相同的问题。奇怪的是,当我计算Intellij调试器中抛出的完全相同的表达式时(当我捕获它并在printstacktrace上有一个断点时)它总是有效的。如果使用SAX解析器,在DOM对象上出现错误似乎很奇怪。假设您实际使用的是DOM解析器,并且列出的代码正在DOM树中导航,//进程是否会以某种方式执行它
代码可能会在迭代节点列表
时修改DOM树?不,它不会改变任何东西。我有一个类是围绕元素的包装器。它为我提供了更漂亮的界面。我发送的方法实际上是读取内部DOM元素(我在第一条消息中添加了完整的代码),我有完全相同的问题。奇怪的是,当我计算Intellij调试器中抛出的完全相同的表达式时(当我捕获它并在printstacktrace上有一个断点时),它总是工作的。
at com.sun.org.apache.xerces.internal.dom.ParentNode.nodeListItem(Unknown Source)
at com.sun.org.apache.xerces.internal.dom.ParentNode.item(Unknown Source)
at com.sun.org.apache.xerces.internal.dom.ParentNode.nodeListGetLength(Unknown Source)
at com.sun.org.apache.xerces.internal.dom.ParentNode.getLength(Unknown Source)
public List<DomElement> getChildNodes() {
ArrayList<DomElement> elements = new ArrayList<DomElement>();
NodeList list = e.getChildNodes();
for(int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
if(node == null) {
continue;
}
if(node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
elements.add(new DomElement(doc, element));
}
}
return elements;
}