-
急,项目中需要,dom4j解析报错,不知道什么原因?5
下面是我的错误日志,我把我的xml的流打出来如下,但是它说我org.dom4j.DocumentException。I/System.out( 453): <?xml version="1.0" encoding="UTF-8"?> I/System.out( 453): <PushMail> I/System.out( 453): <Header> I/System.out( 453): <Version>PushMail1.0</Version> I/System.out( 453): </Header> I/System.out( 453): <Body> I/System.out( 453): <Target name="User"> I/System.out( 453): <Cmd name="UserRegister"> I/System.out( 453): <Status> I/System.out( 453): <Code>10504</Code> I/System.out( 453): <Message>E-mail account connection times out, ple ase check the account password is wrong!</Message> I/System.out( 453): </Status> I/System.out( 453): </Cmd> I/System.out( 453): </Target> I/System.out( 453): </Body> I/System.out( 453): </PushMail> W/System.err( 453): org.dom4j.DocumentException: Error on line 1 of document : At line 1, column 0: no element found Nested exception: At line 1, column 0: no element found
代码如下:SAXReader saxReader = new SAXReader(); InputStreamReader strInStream; try { strInStream = new InputStreamReader(inputStream, "UTF-8"); Document document = saxReader.read(strInStream); Element rootElement = document.getRootElement(); List nodes = rootElement.elements("Header"); for (Iterator it = nodes.iterator(); it.hasNext();) { Element elm = (Element) it.next(); if(elm.getName().equals("UUID")) { } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (DocumentException e){ e.printStackTrace(); }
问题补充:crud0906 写道断点调试一下吧crud0906 写道断点调试一下吧
我都断点了,异常也出来了
问题补充:crud0906 写道引用我都断点了,异常也出来了
那你看看是哪一行的错误,既然提示是no element found说明可能是获取节点的时候出问题了,你看下你的输入流inputStream是否正确
我试了你代码,我晕倒了,你的代码到我这就异常,是这一行: document = saxReader.read(sr,"UTF-8"); 报:An exception occurred: org.dom4j.DocumentException 这个错
问题补充:飞雪无情 写道我采取读取文件的方式也没有错误public static void main(String[] args) throws FileNotFoundException{ InputStream inputStream=new FileInputStream("src\\com\\flysnow\\dom4j\\1.xml"); SAXReader saxReader = new SAXReader(); InputStreamReader strInStream; try { strInStream = new InputStreamReader(inputStream, "UTF-8"); Document document = saxReader.read(strInStream); Element rootElement = document.getRootElement(); List nodes = rootElement.elements("Header"); for (Iterator it = nodes.iterator(); it.hasNext();) { Element elm = (Element) it.next(); if(elm.getName().equals("UUID")) { } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (DocumentException e){ e.printStackTrace(); } }
<?xml version="1.0" encoding="UTF-8"?> <PushMail> <Header> <Version>PushMail1.0</Version> </Header> <Body> <Target name="User"> <Cmd name="UserRegister"> <Status> <Code>10504</Code> <Message>E-mail account connection times out, please check the account password is wrong!</Message> </Status> </Cmd> </Target> </Body> </PushMail>
飞雪无情 写道我采取读取文件的方式也没有错误public static void main(String[] args) throws FileNotFoundException{ InputStream inputStream=new FileInputStream("src\\com\\flysnow\\dom4j\\1.xml"); SAXReader saxReader = new SAXReader(); InputStreamReader strInStream; try { strInStream = new InputStreamReader(inputStream, "UTF-8"); Document document = saxReader.read(strInStream); Element rootElement = document.getRootElement(); List nodes = rootElement.elements("Header"); for (Iterator it = nodes.iterator(); it.hasNext();) { Element elm = (Element) it.next(); if(elm.getName().equals("UUID")) { } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (DocumentException e){ e.printStackTrace(); } }
<?xml version="1.0" encoding="UTF-8"?> <PushMail> <Header> <Version>PushMail1.0</Version> </Header> <Body> <Target name="User"> <Cmd name="UserRegister"> <Status> <Code>10504</Code> <Message>E-mail account connection times out, please check the account password is wrong!</Message> </Status> </Cmd> </Target> </Body> </PushMail>
我也试了你代码,还是异常,我是在android中用的dom4j,然道android不支持?我要疯了。。。
问题补充:7454103 写道public static void main(String[] args) { SAXReader saxReader = new SAXReader(); InputStreamReader strInStream; String str="<?xml version=\"1.0\" encoding=\"UTF-8\"?><PushMail><Header><Version>PushMail1.0</Version></Header><Body>" + "<Target name=\"User\"><Cmd name=\"UserRegister\"><Status><Code>10504</Code><Message>E-mail account connection times out, please check the account password is wrong!</Message></Status></Cmd></Target></Body></PushMail>"; try { StringReader sr = new StringReader(str); Document document = null; document = saxReader.read(sr,"UTF-8"); Element rootElement = document.getRootElement(); List nodes = rootElement.elements("Header"); for (Iterator it = nodes.iterator(); it.hasNext();) { Element elm = (Element) it.next(); System.out.println(elm); System.out.println(elm.asXML()); if(elm.getName().equals("UUID")) { } } } catch (DocumentException e){ e.printStackTrace(); } }
没啥问题! 正常跑的
试试
你这段代码跑了没报错?我单单把你这代码哪出来就报错。我汗颜了。。。
你肯定没跟代码,你要是跟到那行肯定有异常。。。我都跟了
问题补充:7454103 写道public static void main(String[] args) { SAXReader saxReader = new SAXReader(); InputStreamReader strInStream; String str="<?xml version=\"1.0\" encoding=\"UTF-8\"?><PushMail><Header><Version>PushMail1.0</Version></Header><Body>" + "<Target name=\"User\"><Cmd name=\"UserRegister\"><Status><Code>10504</Code><Message>E-mail account connection times out, please check the account password is wrong!</Message></Status></Cmd></Target></Body></PushMail>"; try { StringReader sr = new StringReader(str); Document document = null; document = saxReader.read(sr,"UTF-8"); Element rootElement = document.getRootElement(); List nodes = rootElement.elements("Header"); for (Iterator it = nodes.iterator(); it.hasNext();) { Element elm = (Element) it.next(); System.out.println(elm); System.out.println(elm.asXML()); if(elm.getName().equals("UUID")) { } } } catch (DocumentException e){ e.printStackTrace(); } }
没啥问题! 正常跑的
试试
这是我试你代码的异常:
org.dom4j.DocumentException: Stream closed Nested exception: Stream closed
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.dom4j.io.SAXReader.read(SAXReader.java:417)
at io.Test.main(Test.java:52)
Nested exception:
java.io.IOException: Stream closed
at java.io.StringReader.ensureOpen(StringReader.java:39)
at java.io.StringReader.read(StringReader.java:73)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1740)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString(XMLEntityScanner.java:1437)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:191)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:798)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.dom4j.io.SAXReader.read(SAXReader.java:417)
at io.Test.main(Test.java:52)
Nested exception: java.io.IOException: Stream closed
at java.io.StringReader.ensureOpen(StringReader.java:39)
at java.io.StringReader.read(StringReader.java:73)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1740)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString(XMLEntityScanner.java:1437)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:191)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:798)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.dom4j.io.SAXReader.read(SAXReader.java:417)
at io.Test.main(Test.java:52)
问题补充:飞雪无情 写道哦。Android,那就不要使用dom4j里。可以使用SAX或者DOM解析的方式。
具体可以参看http://www.ibm.com/developerworks/cn/xml/x-android/index.html
然道就不可用用dom4j吗?我听别人说可以用的。。。真的不可用用?还是我没有找到问题的原因????
问题补充:飞雪无情 写道不能。因为andorid adk不支持全部的jdk或者说是jre的特性,而dom4j是针对jdk开发的,如果他增加了andorid不支持的特性就不能在andorid里用了。所以不建议使用dom4j。建议采用sax和dom。dom解析。。不是dom4j实现的解析。那篇文章很好,好好看看
今天打搅你时间了,我刚才把楼上那位的代码在非android工程外跑了一下,没成功,是什么原因啊?
public static void main(String[] args) {
SAXReader saxReader = new SAXReader();
String str="<?xml version=\"1.0\" encoding=\"UTF-8\"?><PushMail><Header><Version>PushMail1.0</Version></Header><Body>" +
"<Target name=\"User\"><Cmd name=\"UserRegister\"><Status><Code>10504</Code><Message>E-mail account connection times out, please check the account password is wrong!</Message></Status></Cmd></Target></Body></PushMail>";
try {
StringReader sr = new StringReader(str);
Document document = saxReader.read(sr,"UTF-8");
Element rootElement = document.getRootElement();
List nodes = rootElement.elements("Header");
for (Iterator it = nodes.iterator(); it.hasNext();) {
Element elm = (Element) it.next();
System.out.println(elm);
System.out.println(elm.asXML());
if(elm.getName().equals("UUID"))
{
}
}
sr.close();
} catch (DocumentException e){
e.printStackTrace();
}
}
}
报如下错误,可是楼上那位没报错,我错误信息如下:
org.dom4j.DocumentException: Stream closed Nested exception: Stream closed
at org.dom4j.io.SAXReader.read(SAXReader.java:484)
at org.dom4j.io.SAXReader.read(SAXReader.java:417)
at io.Test.main(Test.java:42)
Nested exception:
java.io.IOException: Stream closed
at java.io.StringReader.ensureOpen(StringReader.java:39)
at java.io.StringReader.read(StringReader.java:73)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1740)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString(XMLEntityScanner.java:1437)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:191)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:798)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.dom4j.io.SAXReader.read(SAXReader.java:417)
at io.Test.main(Test.java:42)
Nested exception: java.io.IOException: Stream closed
at java.io.StringReader.ensureOpen(StringReader.java:39)
at java.io.StringReader.read(StringReader.java:73)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1740)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString(XMLEntityScanner.java:1437)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:191)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:798)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.dom4j.io.SAXReader.read(SAXReader.java:417)
at io.Test.main(Test.java:42)
问题补充:7454103 写道android的我不敢保证! 我贴的代码 本地绝对OK 都打印出东西了我才放上去的!
我现在把你的代码拿到非android工程外还是不行,还是报那样的错,我要疯了。。。。我要疯了。。。。啊。。。。
问题补充:飞雪无情 写道你要用Andorid自带的,而不是第三方包,他那个写的是用的第三方包。
//从SAXParserFactor获取SAXParser SAXParserFactory spf=SAXParserFactory.newInstance(); SAXParser sp=spf.newSAXParser(); //从SAXParser获取XMLReader XMLReader xr=sp.getXMLReader(); //创建文明自己的内容处理器 ExampleHandler myExampleHandler=new ExampleHandler(); //用内容处理器处理XMLReader xr.setContentHandler(myExampleHandler); //XMLReader获取xml文件 xr.parse(new InputSource(inputStream));
我用你的方法试试,我今天真正疯了,我以前项目做过用dom4j解析,我有的代码还是拷贝的我以前的呢,没想到今天有问题,我真正晕死了。。。
问题补充:飞雪无情 写道Android SDK和JDK不太一样,我也说了,支持部分JDK特性,我说的这个SAX解析都是Android SDK里封装好的API,你可以看一下Android 的API就知道了!
恩,谢谢你,非常谢谢你,你忙吧,让费了你很多时间,不好意思,谢谢你2010年8月18日 11:27
11个答案 按时间排序 按投票排序
-
Android SDK和JDK不太一样,我也说了,支持部分JDK特性,我说的这个SAX解析都是Android SDK里封装好的API,你可以看一下Android 的API就知道了!
2010年8月18日 14:34
-
你要用Andorid自带的,而不是第三方包,他那个写的是用的第三方包。
//从SAXParserFactor获取SAXParser SAXParserFactory spf=SAXParserFactory.newInstance(); SAXParser sp=spf.newSAXParser(); //从SAXParser获取XMLReader XMLReader xr=sp.getXMLReader(); //创建文明自己的内容处理器 ExampleHandler myExampleHandler=new ExampleHandler(); //用内容处理器处理XMLReader xr.setContentHandler(myExampleHandler); //XMLReader获取xml文件 xr.parse(new InputSource(inputStream));
2010年8月18日 14:21
-
不能。因为andorid adk不支持全部的jdk或者说是jre的特性,而dom4j是针对jdk开发的,如果他增加了andorid不支持的特性就不能在andorid里用了。所以不建议使用dom4j。建议采用sax和dom。dom解析。。不是dom4j实现的解析。那篇文章很好,好好看看
2010年8月18日 14:02
-
哦。Android,那就不要使用dom4j里。可以使用SAX或者DOM解析的方式。
具体可以参看http://www.ibm.com/developerworks/cn/xml/x-android/index.html2010年8月18日 13:53
-
我采取读取文件的方式也没有错误
public static void main(String[] args) throws FileNotFoundException{ InputStream inputStream=new FileInputStream("src\\com\\flysnow\\dom4j\\1.xml"); SAXReader saxReader = new SAXReader(); InputStreamReader strInStream; try { strInStream = new InputStreamReader(inputStream, "UTF-8"); Document document = saxReader.read(strInStream); Element rootElement = document.getRootElement(); List nodes = rootElement.elements("Header"); for (Iterator it = nodes.iterator(); it.hasNext();) { Element elm = (Element) it.next(); if(elm.getName().equals("UUID")) { } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (DocumentException e){ e.printStackTrace(); } }
<?xml version="1.0" encoding="UTF-8"?> <PushMail> <Header> <Version>PushMail1.0</Version> </Header> <Body> <Target name="User"> <Cmd name="UserRegister"> <Status> <Code>10504</Code> <Message>E-mail account connection times out, please check the account password is wrong!</Message> </Status> </Cmd> </Target> </Body> </PushMail>
2010年8月18日 12:08
-
public static void main(String[] args) { SAXReader saxReader = new SAXReader(); InputStreamReader strInStream; String str="<?xml version=\"1.0\" encoding=\"UTF-8\"?><PushMail><Header><Version>PushMail1.0</Version></Header><Body>" + "<Target name=\"User\"><Cmd name=\"UserRegister\"><Status><Code>10504</Code><Message>E-mail account connection times out, please check the account password is wrong!</Message></Status></Cmd></Target></Body></PushMail>"; try { StringReader sr = new StringReader(str); Document document = null; document = saxReader.read(sr,"UTF-8"); Element rootElement = document.getRootElement(); List nodes = rootElement.elements("Header"); for (Iterator it = nodes.iterator(); it.hasNext();) { Element elm = (Element) it.next(); System.out.println(elm); System.out.println(elm.asXML()); if(elm.getName().equals("UUID")) { } } } catch (DocumentException e){ e.printStackTrace(); } }
没啥问题! 正常跑的
试试2010年8月18日 11:58
-
引用我都断点了,异常也出来了
那你看看是哪一行的错误,既然提示是no element found说明可能是获取节点的时候出问题了,你看下你的输入流inputStream是否正确2010年8月18日 11:58
相关推荐
Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc
dom4j解析XML必备jardom4j解析XML必备jardom4j解析XML必备jardom4j解析XML必备jar
利用DOM4J解析SOAP中的各个元素的值,在SOAP消息的收发中可以有一点借鉴的地方
1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件
使用 dom4j 解析 XML dom4j 解析 XML dom4j解析xml
java dom4j 解析xml文档 使用java操作xml 例如创建 读取 删除 等等
本文介绍如何使用包含在dom4j中的解析器创建并修改XML文档。dom4j API包含一个解析XML文档的工具。本文中将使用这个解析器创建一个示例XML文档,然后使用同一个解析器修改。与W3C DOM API相比,使用dom4j所包含的...
dom4j解析xml文件的压缩包,完整版。对jdom进行了封装。包含源码,jar包以及所需的全部内容。
dom4j解析xml实例,dom4j解析xml实例,dom4j解析xml实例,
Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题Dom4j解析XML及中文问题
dom4j解析xml文件代码示例 dom4j解析xml文件代码示例 dom4j解析xml文件代码示例
xml解析,dom4j解析,xml循环节点处理,java代码 jar包执行20190331.rar
分别使用DOM和DOM4j解析XML文件,因为目前使用最广泛的是DOM4j所以只写了用DOM4j对XML进行增删改查。
dom4j解析XML所需要的包
dom4j解析字符串
项目下包含dom4j的包 是里用dom4j的sax解析方式 sax解析打文件比dom速度快,该项目为测试项目
java dom4j解析xml (详细注释)
很详细的文档 可以借鉴下 希望对你有帮助
DOM4J jar包 所有的包 xml解析 dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1 导入直接使用
用Dom4j解析XML文件的源码,可以直接放在项目中进行解析