解析xml 几种方法

来源:互联网 发布:java获取webapp下路径 编辑:程序博客网 时间:2024/06/05 17:42


Dom解析xml


package com.example.domresovler;

import java.io.InputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        
        
    }
    
    
    public void btnDomResolver(View v){
        
        
        try {
            //step1:得到一个dom解析器的工厂
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            //step2:通过工厂实例对象生成一个document解析器对象
            DocumentBuilder db = factory.newDocumentBuilder();
            //step3:开始解析xml
            InputStream is = getAssets().open("Books.xml");
            //返回的是一个文档对象
            Document document = db.parse(is);
            //得到根节点  Books
            Element root = document.getDocumentElement();
            //得到Books根节点下所有的子节点  Book元素
            NodeList nodeList = root.getElementsByTagName("Book");
            
            //创建要给容器
            StringBuffer sb = new StringBuffer();
            
            //遍历子节点
            for (int i = 0; i < nodeList.getLength(); i++) {
                //Book  
                Element element = (Element) nodeList.item(i);
                String name = element.getElementsByTagName("name").item(0).getTextContent();//得到name值
                String price = element.getElementsByTagName("price").item(0).getTextContent();
                String author = element.getElementsByTagName("author").item(0).getTextContent();
                
                sb.append("书名 : "+name+"   价格 : "+price+"  作者 : "+author+"\n");
                
            }
            
            
            System.out.println("--->"+sb.toString());
            
            
        } catch (Exception e) {
            e.printStackTrace();
        }    
     
    }

}


Pull解析


package com.example.pullresolver;

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.app.Activity;
import android.os.Bundle;
import android.util.Xml;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    
    
    public void btnPullResolver(View v){
        
        
        List<Book> books = pullResolverXml();
        System.out.println("哈哈哈 : "+books.toString());
        
    }
    
    /**
     * 使用Pull解析xml文档
     */
    private List<Book> pullResolverXml(){
        try {
            //step1:创建一个pull解析器对象
            XmlPullParser parser = Xml.newPullParser();
            //step2:开始解析xml
            InputStream is = getAssets().open("Books.xml");
            parser.setInput(is, "utf-8");
            int type = parser.getEventType();//0 != 1  true   0 != 0 false
            List<Book> books = null;
            Book book = null;
            
            //判断是否已经读取xml文档的结尾
            while(type != XmlPullParser.END_DOCUMENT){
                
                switch (type) {
                case XmlPullParser.START_TAG:
                {
                    
                    if("Books".equals(parser.getName())){
                        //创建集合
                        books = new ArrayList<Book>();
                    }else if("Book".equals(parser.getName())){
                        //创建Book对象
                        book = new Book();
                    }else if("name".equals(parser.getName())){
                        //取出name标签里面的内容
                        String name = parser.nextText();
                        book.setName(name);
                    }else if("price".equals(parser.getName())){
                        String price = parser.nextText();
                        book.setPrice(price);
                    }else if("author".equals(parser.getName())){
                        String author = parser.nextText();
                        book.setAuthor(author);
                    }
                    
                }
                    break;

                case XmlPullParser.END_TAG://结束标签
                    if("Book".equals(parser.getName())){
                        //添加到集合
                        books.add(book);
                    }
                    
                    break;
                }
                
                
                
                //让pull解析器对象往下移动一行
                type = parser.next();
                
            }
            
            
            return books;
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return null;
        
        
    }

}

book

package com.example.pullresolver;

public class Book {
    
    private String name;
    private String price;
    private String author;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPrice() {
        return price;
    }
    public void setPrice(String price) {
        this.price = price;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    @Override
    public String toString() {
        return "Book [name=" + name + ", price=" + price + ", author=" + author
                + "]";
    }

}