Java XML 阅读器错误

Posted

技术标签:

【中文标题】Java XML 阅读器错误【英文标题】:Java XML Reader error 【发布时间】:2011-07-09 14:30:04 【问题描述】:

运行 XML 阅读器的开头时出现错误:

public static void main(String[] args) 

    System.out.println("XML Reader");

    try
    
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.parse("database.xml");

        //normalize text
        doc.getDocumentElement().normalize();
        System.out.println("The root of this doc is "+doc.getDocumentElement().getNodeName());

        NodeList listOfAddresses = doc.getElementsByTagName("address");
        int totalAddresses = listOfAddresses.getLength();
        System.out.println(totalAddresses+" addresses in "+ doc.getDocumentElement().getNodeName());

        //main loop
        for(int i = 0; i<listOfAddresses.getLength(); i++)
        
            Node items = listOfAddresses.item(i);

            if(items.getNodeType() == Node.ELEMENT_NODE)
            
                System.out.println("Address #"+i);

                Element element = (Element)items;

                NodeList nameList = element.getElementsByTagName("name");
                Element nameElement = (Element)nameList.item(0);
                NodeList nameOutput = nameElement.getChildNodes();


                System.out.println("name: "+nameElement);
            
        


    

    catch(SAXParseException err)
    
        System.out.println("Sax Parse Exception error on line "+err.getLineNumber());
    

    catch(SAXException e)
    
        System.out.println("SAX Exception error");
        Exception x = e.getException();
        ((x == null) ? e : x).printStackTrace();
    

    catch(Throwable t)
    
        System.out.println("Trowable error");
        t.printStackTrace();
    

netbeans 给我以下输出:

跑: XML 阅读器 该文档的根是数据库 数据库中有 2 个地址 java.lang.NullPointerException 地址#0 可追踪错误 在 xmlreader.XMLreader.main(XMLreader.java:42)

有人可以帮我解决这个问题吗?

【问题讨论】:

第 42 行是哪一行?知道这可能对我们有所帮助。 始终在源代码中注明异常发生的行。 【参考方案1】:

您没有检查是否存在元素 0。本质上,如果索引无效,.item() 将返回 null,因此可能没有索引为 0 的项目返回 null,然后您尝试在空指针上调用 getChildNodes()。因此你的 NPE。

您应该遍历节点列表中的元素。

改变

Element nameElement = (Element)nameList.item(0);

for(int x = 0; x < nameList.getLength(); x++) 
  nameElement = nameList.item(x);
  NodeList nameOutput = nameElement.getChildNodes();
  System.out.println("name: "+nameElement);

【讨论】:

以上是关于Java XML 阅读器错误的主要内容,如果未能解决你的问题,请参考以下文章

在JAVA中读取XML文件并创建数据库

Java Jersey注册Multipart表单上载文件服务 - 错误:未找到消息正文阅读器

阅读 Excel Open XML 忽略空白单元格

如何判断我的RSS阅读器是否由于RSS源错误或其他原因而无法正常工作?

怎样在安卓+手机上阅读java文件

用xml持久化数据,如何实现一个xml阅读器?