【问题标题】:getDocument() constantly returns a null valuegetDocument() 不断返回一个空值
【发布时间】:2016-09-15 17:37:33
【问题描述】:

我正在尝试使用位于网络驱动器上的 Java 解析 XML 文件...我在这里查看了很多 XML 解析信息,但找不到我需要的答案...问题是 getDocument() 例程即使解析器获得准确的位置和文件名,也会不断返回空值。

这里是代码...

String ThisXMLFile = XMLFileData.getPath();
DOMParser myXMLParser = new DOMParser(); 
myXMLParser.parse(ThisXMLFile);   
Document doc = myXMLParser.getDocument();  

一些注意事项:

我不得不使用 getPath(),因为 getName() 函数没有返回完全限定的文件名和路径 - XML 文件位于网络目录中,并且该目录在我的 PC 上映射到“V”驱动器

我已经为 DOM 对象导入了所有需要的类头文件

上面给出的变量名是真实准确的,所以如果我无意中在变量声明中使用了保留关键字,请提供更正。

我在几种语言方面拥有丰富的编程经验,但这是我的第一个真正的 Java 应用程序。

所有代码行和上面的变量都可以工作,直到我到达最后一行,然后 getDocument() 只是将 doc 变量设置为 null...这使得程序的其余部分中断。

【问题讨论】:

  • 你用什么库来解析 XML ??
  • 导入 com.sun.org.apache.xerces.internal.parsers.DOMParser;
  • 包以com.sun. 开头的任何类都被视为内部实现细节,应用程序永远不应直接引用这些细节。相反,使用 DocumentBuilderFactory.newInstance().newDocumentBuilder() 创建一个 DocumentBuilder 实例,然后将 new File(ThisXMLFile) 传递给 DocumentBuilder 的 parse 方法。
  • 也试过了,感谢您的回复,但除了解析器返回的空值外,我什么也没有得到......而且文件在正确的位置,目录中没有白色的步伐...非常混乱...这实际上应该是一个简单的功能...
  • 我注意到使用 DocumentBuilderFactory 时有些奇怪...当我输入以下代码时: DocumentBuilderFactory.newInstance() - 'newInstance()' 出现,斜体应用于字体,没有其他函数调用执行此操作...我注意到,当我看到这样的内容时,它通常表示代码有问题..这些是我要导入以使用此功能的库 import javax.xml.parsers.DocumentBuilder;导入 javax.xml.parsers.DocumentBuilderFactory;

标签: java xml xml-parsing


【解决方案1】:

我相信您调用了错误的方法...根据您的代码,您正在执行:DOMParser.parse(systemId) 当您需要调用时:DOMParser.parse(InputSource) ...

要创建 InputSource,您可以这样做:

InputSource source = new InputSource(new FileInputStream(ThisXMLFile));
myXMLParser.parse(source);
Document doc = myXMLParser.getDocument();

注意:记得关闭打开的FileInputStream!!!

【讨论】:

  • 谢谢你,虽然我不能让它工作,getDocument() 仍然返回 null...
  • 你能用 FileInputStream 读取文件的内容吗??
  • 是的,我可以...奇怪,但不是 'v:\xmlfiledir\xmlfile.xml' 我得到的是 'V:\\xmlfiledir\\xmlfile.xml' - 不确定双斜杠是否意味着我假设这样做是为了跨平台兼容性......
  • 您是否尝试在真实磁盘上读取相同的文件,而不是网络目录??
  • 刚把目标目录的副本移到我的C盘又试了一次,不走运,还是返回空值……很郁闷……
【解决方案2】:

            XMLInputFactory XMLFactory = XMLInputFactory.newInstance();
            XMLStreamReader XMLReader = XMLFactory.createXMLStreamReader(myXMLStream);
            while(XMLReader.hasNext())
            {
                if (XMLReader.getEventType() == XMLStreamReader.START_ELEMENT)
                {        
                   String XMLTag = XMLReader.getLocalName();
                   if(XMLTag.equals("value"))
                   {
                      String idValue = XMLReader.getAttributeValue(null, "id");
                      if (idValue.equals(ElementName))
                      {
                        System.out.println(idValue);
                        XMLReader.nextTag();
                        System.out.println(XMLReader.getElementText());
                      }
                   }
               }    
               XMLReader.next();
            }

所以这是我最终得到的代码...它可以工作并解决从 XML 文件中检索特定 XML 数据的问题。一开始我想使用节点列表、元素、文档等,但这些功能对我来说从来没有用过……这个可以 - 感谢所有给出的答案,因为他们帮助我思考了这个……

【讨论】:

    猜你喜欢
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2018-12-17
    • 2015-10-09
    • 2021-12-03
    • 2014-02-11
    • 2021-12-05
    相关资源
    最近更新 更多