Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从字符串XML获取空文档的DomParser_Java_Xml_Xml Parsing_Domparser - Fatal编程技术网

Java 从字符串XML获取空文档的DomParser

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);

我试图使用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]。所以节点列表无法找到我要查找的元素。 我的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顶部的表格)。