Android DOM 解析XML方式
首先自己创建一个xml文件:DomTest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <classes>
- <group name="一年级" num="10">
- <person name="小明" age="7">
- <chinese>
- 语文80
- </chinese>
- <english>
- 英语89
- </english>
- </person>
- <person name="小强" age="8">
- <chinese>
- 语文90
- </chinese>
- <english>
- 英语99
- </english>
- </person>
- </group>
- <group name="二年级" num="20">
- <person name="小文" age="8">
- <chinese>
- 语文85
- </chinese>
- <english>
- 英语95
- </english>
- </person>
- <person name="小中" age="9">
- <chinese>
- 语文80
- </chinese>
- <english>
- 英语90
- </english>
- </person>
- </group>
- </classes>
解析出来的结果显示如下图:
下面来分析源代码:
- /**
- * 用dom方式 解析xml 文件
- * @param fileName
- */
- private String domXmlParse(String fileName) {
- String str="";
- // xml文档创建工厂
- DocumentBuilderFactory docFactory = DocumentBuilderFactory
- .newInstance();
- // xml文档创建实例
- DocumentBuilder docBuilder;
- // xml文档
- Document doc = null;
- InputStream inStream = null;
- try {
- docBuilder = docFactory.newDocumentBuilder();
- // 从assets文件夹下获取文件 转换成输入流
- inStream = this.getResources().getAssets().open(fileName);
- doc = docBuilder.parse(inStream);
- // 获取xml跟元素
- Element rootEle = doc.getDocumentElement();
- // 二级父元素的list列表
- NodeList groupNode = rootEle.getElementsByTagName("group");
- // NodeList childNode = rootEle.getElementsByTagName("person");
- // 遍历Classe下所有的group
- for (int i = 0; i < groupNode.getLength(); i++) {
- Element groupEle = (Element) groupNode.item(i);
- String groupName = groupEle.getAttribute("name");
- String num = groupEle.getAttribute("num");
- strstr =str+"name ="+groupName+" num = "+num+"\n";
- Log.e("xml", "name = " + groupName + " num = " + num);
- // NodeList personNode = groupNode.item(i).getChildNodes();
- NodeList personNode = groupEle.getElementsByTagName("person");
- // 遍历group下的所有person
- for (int j = 0; j < personNode.getLength(); j++) {
- Element personEle = (Element) personNode.item(j);
- String name = personEle.getAttribute("name");
- String age = personEle.getAttribute("age");
- strstr =str+"personName ="+name+" personAge = "+age+"\n";
- Log.e("xml", "name = " + name + " age = " + age);
- Element chineseEle = (Element) personEle
- .getElementsByTagName("chinese").item(0);
- Element englistEle = (Element) personEle
- .getElementsByTagName("english").item(0);
- String chinese = chineseEle.getFirstChild().getNodeValue();
- String english = englistEle.getFirstChild().getNodeValue();
- strstr =str+"chinese = "+chinese+" english = "+english+"\n";
- Log.e("xml", "chinese = " + chinese + " english = "
- + english);
- }
- }
- } catch (ParserConfigurationException e1) {
- e1.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (SAXException e) {
- e.printStackTrace();
- }
- return str;
- }
为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。
完整工程的下载地址:
具体下载目录在 /pub/2011/12/27/Android DOM 解析XML方式/