0 0

急,项目中需要,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个答案 按时间排序 按投票排序

0 0

引用
恩,谢谢你,非常谢谢你,你忙吧,让费了你很多时间,不好意思,谢谢你


呵呵,。太客气了。大家共同进步。这也是学习的一种方式!

2010年8月18日 14:40
0 0

Android SDK和JDK不太一样,我也说了,支持部分JDK特性,我说的这个SAX解析都是Android SDK里封装好的API,你可以看一下Android 的API就知道了!

2010年8月18日 14:34
0 0

你要用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
0 0

android的我不敢保证! 我贴的代码 本地绝对OK 都打印出东西了我才放上去的!

2010年8月18日 14:14
0 0

不能。因为andorid adk不支持全部的jdk或者说是jre的特性,而dom4j是针对jdk开发的,如果他增加了andorid不支持的特性就不能在andorid里用了。所以不建议使用dom4j。建议采用sax和dom。dom解析。。不是dom4j实现的解析。那篇文章很好,好好看看

2010年8月18日 14:02
0 0

哦。Android,那就不要使用dom4j里。可以使用SAX或者DOM解析的方式。

具体可以参看http://www.ibm.com/developerworks/cn/xml/x-android/index.html

2010年8月18日 13:53
0 0

android  我倒!!! 他自带XML 解析工具的 jsr72  什么的...

2010年8月18日 13:46
0 0

我采取读取文件的方式也没有错误

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
0 0

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
0 0

引用
我都断点了,异常也出来了

那你看看是哪一行的错误,既然提示是no element found说明可能是获取节点的时候出问题了,你看下你的输入流inputStream是否正确

2010年8月18日 11:58
0 0

断点调试一下吧

2010年8月18日 11:39

相关推荐

Global site tag (gtag.js) - Google Analytics