Android DOM 解析XML方式

首先自己创建一个xml文件:DomTest.xml

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <classes>  
  3.     <group name="一年级" num="10">  
  4.         <person name="小明" age="7">  
  5.             <chinese>  
  6.                 语文80  
  7.             </chinese>  
  8.             <english>  
  9.                 英语89  
  10.             </english>  
  11.         </person>  
  12.         <person name="小强" age="8">  
  13.             <chinese>  
  14.                 语文90  
  15.             </chinese>  
  16.             <english>  
  17.                 英语99  
  18.             </english>  
  19.         </person>  
  20.     </group>  
  21.     <group name="二年级" num="20">  
  22.         <person name="小文" age="8">  
  23.             <chinese>  
  24.                 语文85  
  25.             </chinese>  
  26.             <english>  
  27.                 英语95  
  28.             </english>  
  29.         </person>  
  30.         <person name="小中" age="9">  
  31.             <chinese>  
  32.                 语文80  
  33.             </chinese>  
  34.             <english>  
  35.                 英语90  
  36.             </english>  
  37.         </person>  
  38.     </group>  
  39. </classes>  

解析出来的结果显示如下图:

Android DOM 解析XML方式

下面来分析源代码:

  1. /**  
  2.  * 用dom方式 解析xml 文件  
  3.  * @param fileName  
  4.  */  
  5.     private String domXmlParse(String fileName) {  
  6.         String str="";  
  7.         // xml文档创建工厂  
  8.         DocumentBuilderFactory docFactory = DocumentBuilderFactory  
  9.                 .newInstance();  
  10.         // xml文档创建实例  
  11.         DocumentBuilder docBuilder;  
  12.         // xml文档  
  13.         Document doc = null;  
  14.         InputStream inStream = null;  
  15.         try {  
  16.             docBuilder = docFactory.newDocumentBuilder();  
  17.             // 从assets文件夹下获取文件 转换成输入流  
  18.             inStream = this.getResources().getAssets().open(fileName);  
  19.             doc = docBuilder.parse(inStream);  
  20.             // 获取xml跟元素  
  21.             Element rootEle = doc.getDocumentElement();  
  22.             // 二级父元素的list列表  
  23.             NodeList groupNode = rootEle.getElementsByTagName("group");  
  24.             // NodeList childNode = rootEle.getElementsByTagName("person");  
  25.             // 遍历Classe下所有的group  
  26.             for (int i = 0; i < groupNode.getLength(); i++) {  
  27.   
  28.                 Element groupEle = (Element) groupNode.item(i);  
  29.                 String groupName = groupEle.getAttribute("name");  
  30.                 String num = groupEle.getAttribute("num");  
  31.                 strstr =str+"name ="+groupName+" num = "+num+"\n";  
  32.                   
  33.                 Log.e("xml", "name = " + groupName + "  num = " + num);  
  34.   
  35. //              NodeList personNode = groupNode.item(i).getChildNodes();  
  36.                 NodeList personNode = groupEle.getElementsByTagName("person");  
  37.                 // 遍历group下的所有person  
  38.                 for (int j = 0; j < personNode.getLength(); j++) {  
  39.                     Element personEle = (Element) personNode.item(j);  
  40.                     String name = personEle.getAttribute("name");  
  41.                     String age = personEle.getAttribute("age");  
  42.                     strstr =str+"personName ="+name+" personAge = "+age+"\n";  
  43.                       
  44.                     Log.e("xml", "name = " + name + "   age = " + age);  
  45.   
  46.                     Element chineseEle = (Element) personEle  
  47.                             .getElementsByTagName("chinese").item(0);  
  48.                     Element englistEle = (Element) personEle  
  49.                             .getElementsByTagName("english").item(0);  
  50.                     String chinese = chineseEle.getFirstChild().getNodeValue();  
  51.                     String english = englistEle.getFirstChild().getNodeValue();  
  52.                     strstr =str+"chinese = "+chinese+" english = "+english+"\n";  
  53.                       
  54.                     Log.e("xml", "chinese = " + chinese + "   english = "  
  55.                             + english);  
  56.                 }  
  57.             }  
  58.   
  59.         } catch (ParserConfigurationException e1) {  
  60.             e1.printStackTrace();  
  61.         } catch (IOException e) {  
  62.             e.printStackTrace();  
  63.         } catch (SAXException e) {  
  64.             e.printStackTrace();  
  65.         }  
  66.         return str;  
  67.     }  

为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。 

完整工程的下载地址:

具体下载目录在 /pub/2011/12/27/Android DOM 解析XML方式/