android或者java解析相同节点的xml文件

利用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


 
  

你可能感兴趣的:(问题)