【发布时间】: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