Java 从字符串XML获取空文档的DomParser
我试图使用domParser解析xml字符串,但当我试图获取文档时,它会显示[#document:null],并且不包含xml传递的数据 代码是这样的:Java 从字符串XML获取空文档的DomParser,java,xml,xml-parsing,domparser,Java,Xml,Xml Parsing,Domparser,我试图使用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);
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]。所以节点列表无法找到我要查找的元素。
我的XML相当大。它包含大约50K个字符。
我的问题是,引入这个问题的可能问题是什么
供您参考,这个代码相同的应用程序在OAS和JDK1.4中工作,现在我将应用程序转移到带有JDK1.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=“yongmook kimmkyong100000lowyin fongfong fong200000”;
第二个例子:
nameFile = "<message>Hello</message>
nameFile=“你好
这一切都不起作用。始终返回[#document:null]我假设代码段中的“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
}
String nameFile=“HELLO World”;
DOMParser parser=新的DOMParser();
试一试{
parser.parse(新的InputSource(新的java.io.StringReader(nameFile));
Document doc=parser.getDocument();
字符串消息=doc.getDocumentElement().getTextContent();
System.out.println(消息);
}捕获(SAXE异常){
//处理SAXException
}捕获(IOE异常){
//处理IOException
}
toString()
在DOM类上几乎是无用的。我在这里没有提到任何toString()。我有一个包含xml数据的字符串。我必须将它放在“doc”上,以便将特定元素发送到节点列表,以便对这些数据进行处理。您可能没有调用toString()
显式,但Java会在类似System.out.println(doc)的表达式中自动调用它
,或者如果您在调试器下运行代码,那么调试器通常会使用toString
表示来显示变量值。如果您想将DOM节点写入XML,则必须使用另一个API,或者使用带有无操作转换器的javax.XML.transform
,或者使用org.w3c.DOM.ls
“加载并存储”机制。@IanRoberts感谢您的回复…现在看起来有点清楚了。我正在使用调试器查看所有值..但我仍然不明白为什么即使我在没有调试器的情况下运行应用程序,它也不起作用。NodeList NL=doc.getElementsByTagName(“元素”);我什么都没有得到。如果我查看NL.item(0),我会得到element=null和NL.item(1)=null和NL.getLength()=1Again,您得到了正确的结果-[element=null]
是名为“element”的元素节点的toString
表示(对于元素节点,nodeName
是元素的名称,nodeValue
根据定义始终为null)因此,doc.getElementsByTagName(“元素”)
返回了一个包含单个项的NodeList
,该项本身就是一个“元素”元素。感谢@Roopa的回答。没错,nameFile是一个包含xml数据的字符串。但问题是doc=parser.getDocument()正在返回null。这就是为什么下一行将getTextContent()添加到字符串中的内容不起作用。因为null文档。我必须将此文档元素放入节点列表。但还没有成功:(@NadimAseqAArman No,parser.getDocument()
没有返回null
,而是返回一个非null对象,其toString()表示形式是[#document=null]
。这很好,在我看来,它像是任何文档
节点的合理的toString()
表示形式(文档节点的nodeName
始终为#document
,其nodeValue
始终为空,请参见org.w3c.dom.node的javadocs顶部的表格)。