利用dom4j包,与jaxen包来完成xml解析。需要先下载dom4j包,jaxen包。
xml例子
//创建SaxReader对象
SAXReader saxReader = new SAXReader();
InputStream inputStream = null;
//如果是android studio,则
inputStream=context.getClass().getClassLoader().getResourceAsStream("assets/china_city.xml");//assets文件夹在
与java,res文件夹并列的位置
//如果是eclipse,则
inputStream = context.getResources().getAssets().open("china_city.xml");//xml文件在assets文件夹下,assets在res与src文件夹并列的位置
//读取xml文件,获得Document对象
Document document = saxReader.read(inputStream);
然后调用Document对象的selectnode(String Xpath)方法来定位
List list=document.selectNodes("root/node");//返回XMLNodes集合,参数为有效的 XPath 字符串
Iterator iterator=list.iterator();
while (iterator.hasNext()){ Element element= (Element) iterator.next(); String provinceName=element.attributeValue("Name"); String provinceId=element.attributeValue("ID"); Log.i("省:",provinceName); Log.i("省区域ID:",provinceId); // } }
//获取某一个省下面的市 List list1 = document.selectNodes("/root/node[@ID='410000']/node");//获取河南省的所有市节点集合 Iterator iter=list1.iterator(); while (iter.hasNext()){ Element element= (Element) iter.next(); String henan_city=element.attributeValue("Name");//获取属性值 String henan_city_id=element.attributeValue("ID"); Log.i("henan_city:",henan_city); Log.i("henan_city_id:",henan_city_id);
//获取区,有多少个节点,就可以往下无限获取,与节点名无关。解析不同节点名的xml文件时过程相同。 Iterator iterator2=element.elementIterator(); while (iterator2.hasNext()){ Element element2= (Element) iterator2.next(); String areaName=element2.attributeValue("Name"); String areaId=element2.attributeValue("ID"); Log.i("区:",areaName); Log.i("区域ID:",areaId); } }
如果是节点不同的大文件用sax解析响应速度快,dom4j解析不适合大文件解析,响应速度大概有一两秒反应时间,小文件dom4j解析响应速度不影响,且操作更简便。
demo下载地址:https://github.com/frontin/AnalyticXml