Java 使用DOM解析XML文件时,我做错了什么?
我试图使用DOM解析器解析来自NPR新闻提要的XML文件。我需要文章的标题和描述出现在GUI上(我还没有写过,试图让它们首先使用system.out)。当尝试运行此命令时,我得到了错误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) 我查找了空指针异常是什么,但我不完全确定我写错了其中的哪一部分。 任何提示或“指针”;我们将不胜
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
asnull
,这就是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());