您的位置:首页 > 其它

XML详解-pull解析

2017-07-27 10:10 190 查看

XML

概述:XML可扩展标记语言,是一种标记语言,和HTML类似  <itcast>南昌大学</itcast>
​
xml的作用:
被设计用来描述数据
  1.XML文作为配置文件使用
  2.通用数据交换

XML基本语法

1.声明:必须写在第一行
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
属性:
version:表示XML的版本,默认1.0,目前w3c只有这一个版本
encoding:告诉解析器应该使用的编码格式
standalone:表示XML文档是否独立:取值  true:是  false:否
​
2、元素
<元素名称></元素名称>
元素规则:
   1.区分大小写
   2.标签有开始和结束
   3.有且只有一个根标签
   4.标签应该正确嵌套
 
3.元素属性:属性值使用单引号或者双引号
4.注释
  <!--这里是注释的内容-->
5.CDTATA区
  忽略文本中的特殊符号(把特殊的符号当成普通的文本)
    语法:
       <![CDATA[需要包含的内容]]>
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文件
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<books>
   <book isbn="b001">
       <bookname>Java编程</bookname>
       <author>张三</author>
       <price>39.00</price>
   </book>
   <book isbn="b002">
       <bookname>Javase编程</bookname>
       <author>张三</author>
       <price>39.00</price>
   </book>
</books>
​
解析思路:
   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<Book> 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<Book>();
}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();
   }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息