XML详解-pull解析

XML

概述:XML可扩展标记语言,是一种标记语言,和HTML类似  南昌大学

xml的作用:
被设计用来描述数据
   1.XML文作为配置文件使用
   2.通用数据交换

XML基本语法

1.声明:必须写在第一行

属性:
version:表示XML的版本,默认1.0,目前w3c只有这一个版本
encoding:告诉解析器应该使用的编码格式
standalone:表示XML文档是否独立:取值  true:是  false:否

2、元素
<元素名称>
 元素规则:
    1.区分大小写
    2.标签有开始和结束
    3.有且只有一个根标签
    4.标签应该正确嵌套
    
3.元素属性:属性值使用单引号或者双引号
4.注释
   
5.CDTATA区
   忽略文本中的特殊符号(把特殊的符号当成普通的文本)
     语法:
        
6.特殊符号
7.处理指令

XML解析


XML解析的思想:
    1.DOM思想:
       把整个XML文件装入内存,把其各个部分封装成对象。整个文档形成一个DOM数,然后再进行解析处理
         优点:
            由于在DOM数上能够表示各个节点之间的层次关系,所以可在节点上进行增删改查操作方便
         缺点:由于DOM解析需要将整个文档装入内存,文件过大浪费资源
    
    2.SAX思想:
       基于事件驱动,逐行读取
         优点:  由于是逐行读取,性能好,不浪费资源
         缺点: 不能够明确节点之间的层次关系,所以只能读取数据,不能修改
       
XML解析器:
    JAXP:sun公司的标准,支持dom和Sax两种解析思想
    Jdom:支持DOM思想
    DOM4j:民间组织,是目前世界上主流的DOM解析器,
    pull:微操作系统,比较小巧,支持sax思想

pull解析器的基本用法


使用pull的步骤:
   读取XML文件的步骤
      1.需要导入pull的jar包,
      2.创建解析器的工厂
      3.创建解析器
      4.设置输入
      5.解析XML文件
      
      import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

/**
 * Created by Administrator on 2017/7/11.
 */
public class PullparseXml {
    public static void main(String[] args)throws Exception{
//1.导入pull驱动
        //2.创建pull解析工厂

        XmlPullParserFactory factory=  XmlPullParserFactory.newInstance();

//3.创建pull解析器
        XmlPullParser parse=factory.newPullParser();

      //4.设置输入流
//        /parse.setInput(new jFileInputStream("src/abc.xml"),"UTF-8");

//int eventType=parse.getEventType();
//parse.next();

int eventType=-100;
while ((eventType=parse.getEventType())!=XmlPullParser.END_DOCUMENT)
parse.next();
    }

}

使用pull解析器把XML数据封装成Java对象(读XML)---反序列化


1.定义一个XML文件


    
        Java编程
        张三
        39.00
    
    
        Javase编程
        张三
        39.00
    


解析思路:
    1.当读取到事件的类型为start_tag时且元素名称为books的时候创建集合对象
    2.当读取到事件的类型为start_tag时且元素为book时,创建book对象,同时获取book元素的属性为book对象的属性赋值
    3.当读取到事件的类型为start_tag时且元素名称为bookname,获取bookname元素的文本为book对象的属性赋值
    4.当读取到事件的类型为start_tag时且元素名称为author,获取author元素的文本为book对象的属性赋值
    5.当读取到事件的类型为start_tag时且元素名称为price,获取price元素的文本为book对象的属性赋值
    6.当读到事件类型为end_tag时,且元素名称为book时,把book放到集合中
    
例如:
   import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import java.awt.print.Book;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2017/7/11.
 */
public class PullparseXml {
    public static void main(String[] args)throws Exception{
//1.导入pull驱动
        //2.创建pull解析工厂
        XmlPullParserFactory factory=  XmlPullParserFactory.newInstance();

//3.创建pull解析器
        XmlPullParser parse=factory.newPullParser();

      //4.设置输入流
        parse.setInput(new FileInputStream("web/WEB-INF/book.xml"),"utf-8");

//存储事件类型
int eventType=-99;
//存放图书的信息
        List books=null;
        //定义图书信息的对象
Book book=null;
//遍历XML文档

while ((eventType=parse.getEventType())!=XmlPullParser.END_DOCUMENT){
    //获取元素的名称
    String elementName=parse.getName();
    //判断元素是否是开始元素
    if(eventType==XmlPullParser.START_TAG){
//当读取到事件的类型为start_tag时且元素名称为books的时候创建集合对象
if("books".equals(elementName)){
    //创建集合对象
    books=new ArrayList();
}else if("book".equals(elementName)){
    //当读取到事件的类型为start_tag时且元素为book时,
    // 创建book对象,同时获取book元素的属性为book对象的属性赋值
    book=new Book();
    //取得book的isbn属性为book对象属性赋值
    //第一个参数:表示命名空间
    //第二个参数:XML文档中元素的属性名称
    String isbn=parse.getAttributeValue(null,"isbn");
book.setIsbn(isbn);


}else if("bookname".equals(elementName)){
//    当读取到事件的类型为start_tag时且元素名称为bookname,
// 获取bookname元素的文本为book对象的属性赋值

    //获取元素的文本值
    String bookname=parse.nextText();
    book.setBookname(bookname);


}else if("author".equals(elementName)){
//    当读取到事件的类型为start_tag时且元素名称为author,
// 获取author元素的文本为book对象的属性赋值

    //获取元素的文本值
    String author=parse.nextText();
    book.setAuthor(author);
}
else if("price".equals(elementName)){
//   当读取到事件的类型为start_tag时且元素名称为price,\
// 获取price元素的文本为book对象的属性赋值

    //获取元素的文本值
    String price=parse.nextText();
    book.setPrice(Float.parseFloat(price));
}


    }else if(eventType==XmlPullParser.END_TAG){
        //表示结束元素
        //判断是否是book结尾
        if("book".equals(elementName)){
            //将book存放到集合中
            books.add(book);
        }
    }
parse.next();

}
        for (Book b:books
             ) {
            
        }
    }

}

使用pull把Java对象信息写入XML---序列化


使用pull写入XML文件的步骤:
   1.导入pull的jar包,
   2.创建解析器工厂
   3.创建序列化对象
   4.设置输出
   5.将Java中的数据存放到XML中

例如:
   import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;

import java.awt.print.Book;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2017/7/11.
 */
public class PullparseXml {
    public static void main(String[] args)throws Exception{
//创建书的对象
        Book book=new Book();
        //创建解析器工厂
        XmlPullParserFactory factory=XmlPullParserFactory.newInstance();
        //创建序列化的对象
        XmlSerializer ser=factory.newSerializer();
//设置输出流
        ser.setOutput(new FileOutputStream("web/WEB-INF/book.xml"),"UTF-8");
//设置开始文档
        ser.startDocument("UTF-8",false);

        //获取标签
        ser.startTag(null,"书库");
        ser.startTag(null,"书");
        ser.attribute(null,"版权",book.getIsbn());
ser.startTag(null,"书名");
//处理文本
        ser.text(book.getBookname);
        ser.endTag(null,"书名");

        ser.startTag(null,"作者");
        //处理文本
        ser.text(book.getAuthor());
        ser.endTag(null,"作者");

        //结束标签
        ser.endTag(null,"书");
        ser.endTag(null,"书库");
        //结束文档
        ser.endDocument();
    }
}

你可能感兴趣的:(XML,XML,XML解析,pull解析器)