XML数据解析

来源:互联网 发布:新歌2016网络红歌情歌 编辑:程序博客网 时间:2024/06/03 18:20
  <?xml version="1.0" encoding="UTF-8" ?> - <bookstore>- <book id="1">  <price>18</price>   <year>1995</year>   </book>- <book id="2">  <price>19</price>   <year>1997</year>   </book>- <book id="3">  <price>20</price>   <year>2009</year>   </book>  </bookstore>

】 PULL方式

package com.kk;public class Book {    private int id;    private int price;    private int year;    public void setId(int id) {        this.id = id;    }    public int getId() {        return id;    }    public int getPrice() {        return price;    }    public void setPrice(int price) {        this.price = price;    }    public int getYear() {        return year;    }    public void setYear(int year) {        this.year = year;    }    @Override    public String toString() {        return "Book [id=" + id + ", price=" + price + ", year=" + year + "]";    }}

package com.kk;

import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

public class Main {

public static void main(String[] args) {    List<Book> l=getData();    for(Book b:l){        System.out.println(b);    }}private static  List<Book> getData() {    Book b=null;//封装解析数据的对象    List<Book> l=new ArrayList<Book>();//存储book    try {        //创建解析工厂        XmlPullParserFactory factory=XmlPullParserFactory.newInstance();        //创建解析器        XmlPullParser parser=factory.newPullParser();        //指定解析文件        parser.setInput(new FileReader("kk.xml"));        ////////////////开始解析//////////////////////////////////        //获取事件        int enveType=parser.getEventType();        while(enveType!=XmlPullParser.END_DOCUMENT){            //获取标签名            String tag=parser.getName();            switch (enveType) {            case XmlPullParser.START_DOCUMENT:                break;            case XmlPullParser.START_TAG:                if("book".equals(tag)){                    b=new Book();                    //获取属性值                    String id=parser.getAttributeValue(0);                    b.setId(Integer.parseInt(id));                }else if("price".equals(tag)){                    String price=parser.nextText();                    b.setPrice(Integer.parseInt(price));                }else if("year".equals(tag)){                    String year=parser.nextText();                    b.setYear(Integer.parseInt(year));                }                break;            case XmlPullParser.END_TAG:                if("book".equals(tag)){                    l.add(b);                }                break;            }            enveType=parser.next();//进入下一个事件        }    } catch (Exception e) {        e.printStackTrace();    }    return l;}

}

  <?xml version="1.0" encoding="UTF-8" ?> - <Books>- <book id="火影">  <name>JAVa</name>   <price>13</price>   </book>- <book id="2">  <name>C</name>   <price>14</price>   </book>- <book id="3">  <name>c#</name>   <price>14</price>   </book>  </Books>

】 SAX方式解析

package com.kk;import java.io.IOException;import java.util.List;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;public class Main {    public static void main(String[] args) {      try {              //创建解析器工厂              SAXParserFactory factory=SAXParserFactory.newInstance();              //创建解析器        SAXParser parser=factory.newSAXParser();        //解析指定文件        MyHandler hMyHandler=new MyHandler();        parser.parse("my.xml", hMyHandler);        List<Book> l=hMyHandler.getL();        for(Book b:l){            System.out.println(b);        }    } catch (ParserConfigurationException e) {        e.printStackTrace();    } catch (SAXException e) {        e.printStackTrace();    } catch (IOException e) {        e.printStackTrace();    }    }}

package com.kk;

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

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

public class MyHandler extends DefaultHandler {

private Book book;// 用来封装解析的数据private List<Book> l;// 存储Book对象private String tag;//记录标签的名字public MyHandler() {    l = new ArrayList<Book>();}public List<Book> getL() {//返回List集合    return l;}/** * 解析到文档开始调用 */@Overridepublic void startDocument() throws SAXException {}/** * 解析到文档结束调用 */@Overridepublic void endDocument() throws SAXException {}/** * 解析到开始标签调用 * qName:标签的名字 */@Overridepublic void startElement(String uri, String localName, String qName,        Attributes attributes) throws SAXException {    tag=qName;      if("book".equals(qName)){//如果是book标签,表示读到一个新的元素          book=new Book();          if(attributes!=null){//标签有属性              for(int i=0;i<attributes.getLength();i++){                  System.out.println(attributes.getQName(i));//输出属性                  System.out.println(attributes.getValue(i));//输出属性值              }          }      }}

/**
* 解析到标签结束调用
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
tag=null;//如果不重置tag,此时tag记录的还是开始标签,在characters()方法中,就会进入选择语句,会报异常
if(“book”.equals(qName)){//如果是book标签,表示新元素解析完毕
l.add(book);//将book对象添加到集合中
}

}/** * 调用startElement()或者endElemen()后,调用该方法获取数据  * 】endElement的数据是空字符串 */@Overridepublic void characters(char[] ch, int start, int length)        throws SAXException {    String s=new String(ch,start,length);//获取数据    if("name".equals(tag)){        book.setName(s);    }else if("price".equals(tag)){        book.setPrice(Integer.parseInt(s));    }}

}

“`

0 0
原创粉丝点击