Android 解析XML 的三種方法

Ned40F 8年前發布 | 814 次閱讀 Java Android

使用的是eclipse,android 平臺
</div>

 

Pull 解析    

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.util.Xml;

import com.leo.sax_parser.model.Person;

public class PullParser {
    public static List<Person> readXML(InputStream inputstream)
            throws XmlPullParserException, IOException {
        List<Person> persons = null;
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(inputstream, "UTF-8");
        int eventCode = parser.getEventType();
        Person person = null;
        while (eventCode != XmlPullParser.END_DOCUMENT) {
            switch (eventCode) {
            case XmlPullParser.START_DOCUMENT:
                persons = new ArrayList<Person>();
                break;
            case XmlPullParser.START_TAG:
                if ("person".equals(parser.getName())) {
                    person = new Person();
                    person.setId(parser.getAttributeValue(0));

                }else if(person != null){
                    if ("name".equals(parser.getName())) {
                        person.setName(parser.nextText());
                    }else if("age".equals(parser.getName())){
                        person.setAge(Integer.parseInt(parser.nextText()));
                    }else if("phoneNumber".equals(parser.getName())){
                        person.setPhoneNumber(Integer.parseInt(parser.nextText()));
                    }
                }
                break;
            case XmlPullParser.END_TAG:
                    if ("person".equals(parser.getName()) && person!= null) {
                        persons.add(person);
                        person =null;
                    }
                break;
            default:
                break;
            }
            eventCode = parser.next();
        }

        return persons;
    }
}

SAX 解析    

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import android.util.Log;

import com.leo.sax_parser.model.Person;

public class SAX_handler extends DefaultHandler {
    private static final String Tag = "SAX_handler";
    private List<Person> persons;
    private String perTag;
    private Person person;

    public List<Person> getPersons() {
        return persons;
    }

    @Override
    public void startDocument() throws SAXException {
        persons = new ArrayList<Person>();//初始化用于存放person對象的persons,用于存放讀取到的相應的信息。
        Log.i(Tag, "startDocument");
    }

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        if ("person".equals(localName)) {
            for (int i = 0; i < attributes.getLength(); i++) {
                Log.i(Tag, "attributeName:" + attributes.getLocalName(i)
                        + "attributeValue:" + attributes.getValue(i));
                person = new Person();
                person.setId(attributes.getValue(i));
            }
        }
        perTag = localName;
        Log.i(Tag, qName + "startElement***");
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
//       super.characters(ch, start, length);
        String data = new String(ch, start, length);
        if (!"".equals(data.trim())) {
            Log.i(Tag, "Content:" + data);
        }
        if ("name".equals(perTag)) {
            person.setName(data);
        } else if ("age".equals(perTag)) {
            person.setAge(Integer.parseInt(data));
        } else if ("phoneNumber".equals(perTag)) {

            person.setPhoneNumber(Integer.parseInt(data));
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        Log.i(Tag, qName + "endElement");
        if (person != null&&"person".equals(localName)) {
            persons.add(person);
            person = null;
        }
        perTag = null;
    }

    @Override
    public void endDocument() throws SAXException {
        Log.i(Tag, "endDocument");
    }

}

Dom 解析    

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

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.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import android.util.Log;

import com.leo.sax_parser.model.Person;

public class DomParser {
    private static final String Tag = "DomParser";

    public static List<Person> readXMLByDom(InputStream input)
            throws ParserConfigurationException, SAXException, IOException {
        List<Person> persons = new ArrayList<Person>();
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(input);
        Element root = document.getDocumentElement();
        NodeList nodes = root.getElementsByTagName("person");
        for (int i = 0; i < nodes.getLength(); i++) {
            Element element = (Element) nodes.item(i);
            Person person = new Person();
            person.setId(element.getAttribute("id"));
            NodeList childNodes = element.getChildNodes();
            Log.i(Tag, childNodes.getLength() + "");
            for (int j = 0; j < childNodes.getLength(); j++) {
                Node child = childNodes.item(j);
                if (child.getNodeType() != Node.ELEMENT_NODE) { // 解決getChildNodes().getLength()與實際不符的問題
                    continue;
                }
                Element childElement = (Element) child;
                Log.i("DomParser", childElement.getNodeName() + ":"
                        + childElement.getTextContent().trim());
                if ("name".equals(childElement.getNodeName())) {
                    person.setName(childElement.getTextContent().trim());
                } else if ("age".equals(childElement.getNodeName())) {
                    person.setAge(Integer.parseInt(childElement
                            .getTextContent().trim()));
                } else if ("phoneNumber".equals(childElement.getNodeName())) {
                    person.setPhoneNumber(Integer.parseInt(childElement
                            .getFirstChild().getNodeValue()));
                }
            }
            persons.add(person);
        }

        return persons;
    }
}
 本文由用戶 Ned40F 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!