【问题标题】:DomParser from string XML getting null document来自字符串 XML 的 DomParser 获取空文档
【发布时间】:2015-06-08 16:28:38
【问题描述】:

我正在尝试使用 domParser 解析 xml 字符串,但是当我尝试获取文档时,它显示 [#document: null] 并且它不包含 xml 传递的数据。

代码是这样的:

Document doc = null;
DOMParser parser = new DOMParser();
logger.debug("Parsing");
InputSource IS = new InputSource(new StringReader(nameFile));            
parser.parse(IS);
doc = parser.getDocument();
NodeList NL = doc.getElementsByTagName("element");

问题从 doc = parser.getDocument() 开始。 它返回 [#document=null]。所以 NodeList 找不到我正在寻找的元素。 我的 XML 很大。它包含大约 50K 个字符。 我的问题是,引入这个问题的可能问题是什么?

为了您的信息,这个具有相同代码的应用程序在带有 JDK1.4 的 OAS 中工作,现在我正在将该应用程序转移到带有 JDK 1.6 的 Weblogic 12c。

提前致谢。

更新: 抱歉没有提到 nameFile 数据类型。 nameFile是一个字符串格式的xml数据。

更新2: 我试过一个简单的xml,但没有运气。 例子: 第一个例子:这个字符串没有任何空格 ->

nameFile = "<?xml version='1.0'?><company><staff id='1001'><firstname>yong</firstname><lastname>mook kim</lastname><nickname>mkyong</nickname><salary>100000</salary></staff><staff id='2001'><firstname>low</firstname><lastname>yin fong</lastname><nickname>fong fong</nickname><salary>200000</salary></staff></company>";

第二个例子:

nameFile = "<message>Hello</message>

这些都不起作用。总是返回 [#document:null]

【问题讨论】:

  • toString() 在 DOM 类上几乎没用。
  • 我在这里没有提到任何 toString() 。我有一个包含 xml 数据的字符串。我必须把它放在“doc”上,以获取 NodeList 的特定元素,以便对这些数据进行一些处理。
  • 你可能没有显式调用toString(),但它会被Java在System.out.println(doc)这样的表达式中自动调用,或者如果你在调试器下运行代码,那么通常会使用@ 987654327@ 表示来显示变量值。如果你想将一个 DOM 节点写成 XML,那么你必须使用另一个 API,要么是 javax.xml.transform 和一个无操作 Transformer,要么是 org.w3c.dom.ls“加载和存储”机制。
  • @IanRoberts 感谢您的回复……现在看起来有点清楚了。我正在使用调试器来查看所有值.. 但我仍然很困惑为什么即使我在没有调试器的情况下运行应用程序也无法正常工作。 NodeList NL= doc.getElementsByTagName("元素");我什么也得不到。如果我查看 NL.item(0) 我得到 element=null 和 NL.item(1) = null 和 NL.getLength() = 1
  • 再一次,你得到了正确的东西 - [element=null] 是名称为“元素”的元素节点的toString 表示(对于元素节点, nodeName 是元素的名称,nodeValue 根据定义始终为空)。所以doc.getElementsByTagName("element") 给你返回了一个NodeList 包含一个项目,它本身就是一个“元素”元素。

标签: java xml xml-parsing domparser


【解决方案1】:

我假设你的代码 sn-p 中的 'nameFile' 是一个字符串!以下内容非常适合我。

String nameFile= "<message>HELLO World</message>";
DOMParser parser = new DOMParser();
try {
    parser.parse(new InputSource(new java.io.StringReader(nameFile)));
    Document doc = parser.getDocument();
    String message = doc.getDocumentElement().getTextContent();
    System.out.println(message);
} catch (SAXException e) {
    // handle SAXException 
} catch (IOException e) {
    // handle IOException 
}

【讨论】:

  • 感谢@Roopa 的回答。没错,nameFile 是一个包含 xml 数据的字符串。但问题是 Document doc = parser.getDocument() 返回 null。这就是为什么将 getTextContent() 添加到字符串的下一行不起作用的原因。因为空文档。我不得不把这个文档元素放到一个节点列表中。还没有成功:(
  • @NadimAseqAArman 不,parser.getDocument() 没有返回 null,它返回一个非空对象,其 toString() 表示为 [#document=null]。这很好,在我看来它是任何Document 节点的合理toString() 表示(文档节点的nodeName 始终为#document 并且其nodeValue 始终为空,请参见顶部的表格org.w3c.dom.Node 的 javadocs)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 2022-01-15
  • 2014-12-14
相关资源
最近更新 更多