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();
}
}