Java 如果XML有enclosure标记,DOM解析器将出现空指针异常

Java 如果XML有enclosure标记,DOM解析器将出现空指针异常,java,android,domparser,Java,Android,Domparser,我正在创建一个android应用程序来解析RSS提要,在过去的几周里,它一直运行良好。但是最近其中一篇文章有一个标记,应用程序停止工作,logcat声明DOMParser抛出了一个NullPointerException。 我经历并尝试了我的java知识所能做的一切。但是没有用 作为补充说明,如果我手动删除有问题的标签,问题就解决了,应用程序再次正常工作 这是我正在解析的xml <item> <title>Title</title> <link>L

我正在创建一个android应用程序来解析RSS提要,在过去的几周里,它一直运行良好。但是最近其中一篇文章有一个
标记,应用程序停止工作,logcat声明DOMParser抛出了一个NullPointerException。
我经历并尝试了我的java知识所能做的一切。但是没有用

作为补充说明,如果我手动删除有问题的标签,问题就解决了,应用程序再次正常工作

这是我正在解析的xml

<item>
<title>Title</title>
<link>Link</link>
<pubDate>Sun, 27 Jan 2013 05:08:30 +0000</pubDate>
<dc:creator></dc:creator>
<guid isPermaLink="false">guid</guid>
<content:encoded>
Content
</content:encoded>
<enclosure url="" length="22836034" type="audio/mpeg"/>
</item>
是NullPointerException的原因,但正如我前面所说的,如果提要没有
标记,它会正常工作

总之,如果XML文件有一个
标记,它将导致应用程序不再工作。但是没有标签,它工作得很好。我试图做的是忽略标记或(正确地)删除它,然后继续解析文档的其余部分。
目前没有任何东西对我有效,这就是为什么我在这里问


任何帮助都将不胜感激。

是的-您正在询问
项的每个子节点的第一个子节点的值

enclosure
节点没有任何子节点,因此返回null,如文档所示:

此节点的第一个子节点。如果没有这样的节点,则返回null


因此,在任何节点上调用
getFirstChild()
都可以,但是在调用
getNodeValue()

之前,您应该先检查该值是否为null。当然,是的,您需要的是
项的每个子节点的第一个子节点的值

enclosure
节点没有任何子节点,因此返回null,如文档所示:

此节点的第一个子节点。如果没有这样的节点,则返回null


因此,在任何节点上调用
getFirstChild()
都可以,但是在调用
getNodeValue()

之前,应该先检查该值是否为null,谢谢,它成功了!在我睡眠不足的状态下,我一定忽略了这一点。一个简单的if语句解决了我的简单问题。再次感谢你,谢谢,成功了!在我睡眠不足的状态下,我一定忽略了这一点。一个简单的if语句解决了我的简单问题。再次感谢你。
Document doc = db.parse(new InputSource(url.openStream()));
            doc.getDocumentElement().normalize();


            NodeList nl = doc.getElementsByTagName("item");



            int length = nl.getLength();

            for (int i = 0; i < length; i++) {
                Node currentNode = nl.item(i);
                RSSItem _item = new RSSItem();




                NodeList nchild = currentNode.getChildNodes();
                int clength = nchild.getLength();


                for (int j = 1; j < clength; j = j + 2) {

                    Node thisNode = nchild.item(j);
                    String nodeContent = null;
                    String nodeName = thisNode.getNodeName();


                    nodeContent = nchild.item(j).getFirstChild().getNodeValue();
nodeContent = nchild.item(j).getFirstChild().getNodeValue();