首先自己創建一個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)。
完整工程的下載地址:
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /pub/2011/12/27/Android DOM 解析XML方式/