zoukankan      html  css  js  c++  java
  • XML DOM解析

    DOM解析XML文件时,会将XML文件的所有内容读取到内存中,然后使用DOM API遍历XML数、检索所需要的数据。使用DOM操作XML比较直观,并且在某些方面比基于SAX的实现更加简单。但是因为DOM需要将XML文件的所有内容读取到内存,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX来解析XML文件,当然,如果XML的文件内容较小,采用DOM也是可行的。

    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <!-- 添加一个按钮 -->
    
        <Button
            android:id="@+id/start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="GO!" />
        <!-- 添加一个文本框,用于显示结果 -->
    
        <TextView
            android:id="@+id/show"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="" />
    
    </LinearLayout>

    DOMXMLActivity.java

    package com.supermario.domxml;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class DomXMLActivity extends Activity {
        // 新建一个按钮用于响应用户按键
        private Button start;
        // 新建一个TextView用于存放结果
        private TextView show;
        // Assets中的xml文件名称
        private String fileName = "fruit.xml";
        InputStream inStream = null;
    
        /** 首次创建界面时运行 */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            show = (TextView) findViewById(R.id.show);
            start = (Button) findViewById(R.id.start);
    
            try {
                // 从Assets中获取文件
                inStream = this.getAssets().open(fileName);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // 为按键绑定事件
            start.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    // 用于存放结果字符串
                    String result = "";
                    // 解析字符流
                    result = parse(inStream);
                    // 将结果显示到界面上
                    show.setText(result);
                }
            });
        }
    
        // 解析字符流
        public String parse(InputStream inStream) {
            String result = "";
            // 实例化一个DocumentBuilderFactory类
             DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = null;
            Document doc = null;
            try {
                // 实例化一个DocumentBuilder用于解析字符流
                builder = dbf.newDocumentBuilder();
            } catch (ParserConfigurationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                // 解析字符流
                doc = builder.parse(inStream);
            } catch (SAXException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Element ele = doc.getDocumentElement();
            // 获取所有的“fruit”节点
             NodeList nl = ele.getElementsByTagName("fruit");
            if (nl != null && nl.getLength() != 0) {
                for (int i = 0; i < nl.getLength(); i++) {
                  Element entry = (Element) nl.item(i);
                    // 用于获取属性
                    result += "name:" + entry.getAttribute("name") + "-->";
                    // 用于获取文本内容
                    result += entry.getTextContent() + "
    ";
                }
            }
            return result;
        }
    }

    Fruit.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <fruit id="1" name="apple">
            <fruit id="01" name="grap">10yuan</fruit>
        </fruit>
        <fruit id="2" name="banana">3yuan
        </fruit>
        <fruit id="3" name="pear" />
    
    </resources>

    输出结果:

    name:apple-->
            10yuan
       
    name:grap-->10yuan
    name:banana-->3yuan
       
    name:pear-->

  • 相关阅读:
    #include <utility>
    Html的空格显示
    ExtJs自学教程(1):一切从API開始
    天黑的时候,我又想起那首歌
    citrix协议ICA技术原理
    约瑟夫环问题
    数据结构和算法设计专题之---八大内部排序
    HDU
    深入分析C++引用
    八大排序算法总结
  • 原文地址:https://www.cnblogs.com/AndyGe/p/3431191.html
Copyright © 2011-2022 走看看