Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用DOM解析XML文件时,我做错了什么?_Java_Xml_Dom - Fatal编程技术网

Java 使用DOM解析XML文件时,我做错了什么?

Java 使用DOM解析XML文件时,我做错了什么?,java,xml,dom,Java,Xml,Dom,我试图使用DOM解析器解析来自NPR新闻提要的XML文件。我需要文章的标题和描述出现在GUI上(我还没有写过,试图让它们首先使用system.out)。当尝试运行此命令时,我得到了错误 java.lang.NullPointerException at NPRDOM.NPRInfo(NPRDOM.java:26) at NPRDOM.main(NPRDOM.java:9) 我查找了空指针异常是什么,但我不完全确定我写错了其中的哪一部分。 任何提示或“指针”;我们将不胜

我试图使用DOM解析器解析来自NPR新闻提要的XML文件。我需要文章的标题和描述出现在GUI上(我还没有写过,试图让它们首先使用system.out)。当尝试运行此命令时,我得到了错误

java.lang.NullPointerException  
    at NPRDOM.NPRInfo(NPRDOM.java:26)  
    at NPRDOM.main(NPRDOM.java:9) 
我查找了空指针异常是什么,但我不完全确定我写错了其中的哪一部分。 任何提示或“指针”;我们将不胜感激。非常感谢

//import java.io.*;
import java.net.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;

public class NPRDOM {

    public static void main(String[] args) throws Exception {
        NPRInfo();
    }

    public static void NPRInfo() throws Exception {
        try {
        //URL XmlFile = new URL("http://www.npr.org/rss/rss.php?id=1001");
        DocumentBuilderFactory XmlBuilder = DocumentBuilderFactory.newInstance();
        DocumentBuilder xBuilder = XmlBuilder.newDocumentBuilder();
        Document xml = xBuilder.parse(new URL("http://www.npr.org/rss/rss.php?id=1001").openStream());

        xml.getDocumentElement().normalize();

        NodeList nList = xml.getElementsByTagName("channel");

        int temp = 0;
        for (temp = 0; temp < nList.getLength(); temp++);
            Node nNode = nList.item(temp);
            System.out.println("Current Element " + nNode.getNodeName());
            if (nNode.getNodeType() == Node.ELEMENT_NODE){
                Element eElement = (Element) nNode;
                System.out.println("Title : " + eElement.getAttribute("title"));
                System.out.println("Description : "+ eElement.getAttribute("description"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
//导入java.io.*;
导入java.net。*;
导入javax.xml.parsers.*;
导入org.w3c.dom.*;
公共类NPRDOM{
公共静态void main(字符串[]args)引发异常{
NPRInfo();
}
public static void NPRInfo()引发异常{
试一试{
//URL XmlFile=新URL(“http://www.npr.org/rss/rss.php?id=1001");
DocumentBuilderFactory XmlBuilder=DocumentBuilderFactory.newInstance();
DocumentBuilder xBuilder=XmlBuilder.newDocumentBuilder();
文档xml=xBuilder.parse(新URL(“http://www.npr.org/rss/rss.php?id=1001openStream());
xml.getDocumentElement().normalize();
NodeList nList=xml.getElementsByTagName(“通道”);
内部温度=0;
对于(temp=0;temp
您至少有两个明显的NPE来源

Document xml = xBuilder.parse(new URL("http://www.npr.org/rss/rss.php?id=1001").openStream());
if(xml==null)
   System.out.println("No XML DOM Document retrieved.");

xml.getDocumentElement().normalize();

NodeList nList = xml.getElementsByTagName("channel");
if(nList ==null)
   System.out.println("No elements with tag name channel retrieved.");

删除
for
循环语句末尾的分号:

for (temp = 0; temp < nList.getLength(); temp++);

当然,您应该添加对子节点是否存在的检查(以上假设始终存在
标题
节点)。

可能只需尝试将从xBuilder.parse()返回的完整xml转储到System.out即可查看您得到的确切信息?现在的空指针异常似乎来自于您返回的xml中没有“通道”元素。基本上,您得到的是
nNode
as
null
,这就是
nNode.getNodeName()
引发的
NullPointerException
哇,感谢它实际上解决了大部分问题,现在看来,它只拉一个故事,而不是文档上的所有故事。您只需要获取“故事”元素并循环它们,就像您正在做的那样。这基本上是遍历XML的一步。你是一个巨大的帮助者,如果可以的话,我会+1,但我的代表似乎太糟糕了。哈哈,无论如何,非常感谢。谢谢你指出这一点。我只是从来没有使用过DOM解析器或任何解析器,下次我会更加注意观察!
System.out.println("Title : "
                        + eElement.getElementsByTagName("title").item(0).getChildNodes().item(0).getNodeValue());
System.out.println("Description : "
                        + eElement.getElementsByTagName("description").item(0).getChildNodes().item(0).getNodeValue());