现在的位置: 首页 > 综合 > 正文

Android4.0和Android2.3,2.2以及其他版本DOM解析XML问题

2018年04月13日 ⁄ 综合 ⁄ 共 1300字 ⁄ 字号 评论关闭

今天在项目中遇到一个无奈的问题!困扰了我很久,后来和同事的代码中和一下终于发现了,这个是DOM解析xml的问题,贴代码说明问题:

问题代码如下:

 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try {
			DocumentBuilder db = dbf.newDocumentBuilder();
			InputStream is = null;
			Document doc = null;
			try {
				is = getAssets().open("undeal.xml");
				doc = db.parse(is);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			Element rootElement = doc.getDocumentElement(); 
			NodeList list = rootElement .getElementsByTagName("update_info");
			Log.v("list", "list.length()" + list.getLength());

当Log日志在小米1S(Android4.0)中打印出来的时候的时候我抑郁了:

list, list.length()0
我马上使用lephone(Android2.2),打印的结果
list, list.length()1

我认为是Android版本不兼容,我准备要换SAX解析方法的时候,我同事让我查查代码,然后我们对了一下以前的代码,然后奇迹的发现,Document,和Element的问题,在Android4.0中将element对象换成Document,OK。结果一样了,在Android4.0中一样能执行了,至于内部的方法我还没有研究,以后有机会研究研究在出blog。

正确代码:

 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try {
			DocumentBuilder db = dbf.newDocumentBuilder();
			InputStream is = null;
			Document doc = null;
			try {
				is = getAssets().open("undeal.xml");
				doc = db.parse(is);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			Element rootElement = doc.getDocumentElement(); 
			NodeList list = doc.getElementsByTagName("update_info");
			Log.v("list", "list.length()" + list.getLength());




//小米1S(Android4.0)中打印出来:
//list, list.length()1
//我马上使用lephone(Android2.2),打印的结果
//list, list.length()1



抱歉!评论已关闭.