今天在项目中遇到一个无奈的问题!困扰了我很久,后来和同事的代码中和一下终于发现了,这个是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