1、什么是xml(xtendsible markup language可扩展的标记语言)?
1)定义
基于文本的通用的数据保存格式。
(1)通用的
点的坐标
Point类 point对象(x=10,y=20)
a,序列化
b,数据库表
c,文件
...
(2)数据格式
<point>
<x>10</x>
<y>20</y>
</point>
2、xml的基本语法
1)元素
(1)什么是元素?
开始标记、结束标记以及标记之间的内容统称为元素。
(2)元素有哪些特点
a,每个xml文档必须有唯一的一个根元素。
b,元素可以嵌套。
c,元素有开始标记和结束标记,如果
一个元素没有内容,称之为空元素。
比如:
<order></order>
空元素也可以简写为
<order/>
2)属性
(1)什么是属性?
用来描述元素的特性
(2)属性的特点
a,属性必须有属性名称和属性值,属性值必须用引号(单引号双引号都可以)括起来。
比如:
<point type="a" class="b">
</point>
b,属性必须放在开始标记里面。
c,可以有多个属性,多个属性用空格隔开。
3)实体引用
(1)什么是实体引用
xml文档里面,有一些特殊的字符,比如<,>等等,如果要表示其原始的含义,必须用相应的转义字符序列来表示。
< <
> >
& &
' '
" "
4)xml声明
<?xml version="1.0" encoding="utf-8"?>
version:设置xml的版本。
encoding: xml文档的编码。
每一个xml文档,都必须先添加xml声明。
5)CDATA
告诉解析器,CDATA包含的数据不要去解析。
比如:
<![CDATA[ 1<2 & 2>3 ]]>
6)大小写敏感
<point></Point> error!
习惯用小写,如果有多个单词组成一个标记,建议用"-"连接。比如
java : studentName
xml : <student-name>
3、xml解析
1)常见的解析方式
a, DOM(Document Object Model): 将一个xml文档先读取完毕,然后在内存当中生成一棵完整的dom树。这种方式的缺点是会占用过多的内存。
b, SAX(Simple Api for Xml):基于事件,当解析器读取到开始标记、内容、结束标记会产生相应的事件。通过监听这些事件编写相应的程序。缺点一个是编程相对比较复杂,另外,只能读不能写。SAX对内存空间占用比较小,所以,当对内存空间有限制的场合下需要解析xml时,可以使用SAX。
c, 不使用官方提供的DOM和SAX,而是使用一些开源的组件,比如DOM4j,Pull。
2)将一个java对象转换成一个对应的xml文档
(1)思想
step1,先设计好xml文档的结构类对应一个元素,比如Point类对应point元素。 类的属性可以对应一个子元素或者元素的属性。如果类的属性是基本类型,对应子元素或者元素的属性均可,如果类的属性是一个复杂类型,则对应子元素。比如,Student类有一个属性Address,则应该
<student>
<address>
<city></city>
<street></street>
</address>
</student>
step2,在内存当中,构造相应的dom树
step3,输出
3)将一个xml文档转换成一个对应的java对象
(1)思想
step1, 将xml文档转换成一个dom树。
step2, 读取dom树节点的值。
4、xml设计
(1)xml设计的含义
定义xml文档的结构(有哪些元素,元素包含哪些
属性,元素的出现的顺序、次数等等)。
(2)如何设计
1)DTD文档
<!DOCTYPE orders[
<!ELEMENT orders (order+)>
<!ELEMENT order (name,flight,time,dest)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT flight (#PCDATA)>
<!ELEMENT time (#PCDATA)>
<!ELEMENT dest (#PCDATA)>
<!ATTLIST order type CDATA #REQUIRED>
类似于dtd文档,也是用来定义xml文档的结构的。只不过,schema使用了xml的语法,并且,比dtd更灵活,能够表示更复杂的数据类型,并且支持命名空间。
5、xpath
(1)xpath是什么?
类似于使用sql语句查询数据库,xpath语句可以用来查询xml文档。
(2)如何使用xpath?
step1,构造dom树。
比如:
SAXReader reader = new SAXReader();
Document doc = reader.read(ips);
step2,调用doc的selectNodes方法,该方法里面填写 xpath语句即可。
比如:
doc.selectNodes("/orders/order/time");
典型的xpath语句
1)从根节点开始查询
比如:
doc.selectNodes("/orders/order/time");
2)以索引的方式查询
比如:
doc.selectNodes("/orders/order[1]/time");
3)依据属性值进行查询
比如:
doc.selectNodes("/orders/order[@type='vip']/time");
4)任意查询(不从根节点开始)
比如:
doc.selectNodes("//name");
5)依据子节点的值进行查询
比如:
doc.selectNodes("/orders/order[flight='ca1008']/dest");
1)定义
基于文本的通用的数据保存格式。
(1)通用的
点的坐标
Point类 point对象(x=10,y=20)
a,序列化
b,数据库表
c,文件
...
(2)数据格式
<point>
<x>10</x>
<y>20</y>
</point>
2、xml的基本语法
1)元素
(1)什么是元素?
开始标记、结束标记以及标记之间的内容统称为元素。
(2)元素有哪些特点
a,每个xml文档必须有唯一的一个根元素。
b,元素可以嵌套。
c,元素有开始标记和结束标记,如果
一个元素没有内容,称之为空元素。
比如:
<order></order>
空元素也可以简写为
<order/>
2)属性
(1)什么是属性?
用来描述元素的特性
(2)属性的特点
a,属性必须有属性名称和属性值,属性值必须用引号(单引号双引号都可以)括起来。
比如:
<point type="a" class="b">
</point>
b,属性必须放在开始标记里面。
c,可以有多个属性,多个属性用空格隔开。
3)实体引用
(1)什么是实体引用
xml文档里面,有一些特殊的字符,比如<,>等等,如果要表示其原始的含义,必须用相应的转义字符序列来表示。
< <
> >
& &
' '
" "
4)xml声明
<?xml version="1.0" encoding="utf-8"?>
version:设置xml的版本。
encoding: xml文档的编码。
每一个xml文档,都必须先添加xml声明。
5)CDATA
告诉解析器,CDATA包含的数据不要去解析。
比如:
<![CDATA[ 1<2 & 2>3 ]]>
6)大小写敏感
<point></Point> error!
习惯用小写,如果有多个单词组成一个标记,建议用"-"连接。比如
java : studentName
xml : <student-name>
3、xml解析
1)常见的解析方式
a, DOM(Document Object Model): 将一个xml文档先读取完毕,然后在内存当中生成一棵完整的dom树。这种方式的缺点是会占用过多的内存。
b, SAX(Simple Api for Xml):基于事件,当解析器读取到开始标记、内容、结束标记会产生相应的事件。通过监听这些事件编写相应的程序。缺点一个是编程相对比较复杂,另外,只能读不能写。SAX对内存空间占用比较小,所以,当对内存空间有限制的场合下需要解析xml时,可以使用SAX。
c, 不使用官方提供的DOM和SAX,而是使用一些开源的组件,比如DOM4j,Pull。
2)将一个java对象转换成一个对应的xml文档
(1)思想
step1,先设计好xml文档的结构类对应一个元素,比如Point类对应point元素。 类的属性可以对应一个子元素或者元素的属性。如果类的属性是基本类型,对应子元素或者元素的属性均可,如果类的属性是一个复杂类型,则对应子元素。比如,Student类有一个属性Address,则应该
<student>
<address>
<city></city>
<street></street>
</address>
</student>
step2,在内存当中,构造相应的dom树
step3,输出
3)将一个xml文档转换成一个对应的java对象
(1)思想
step1, 将xml文档转换成一个dom树。
step2, 读取dom树节点的值。
4、xml设计
(1)xml设计的含义
定义xml文档的结构(有哪些元素,元素包含哪些
属性,元素的出现的顺序、次数等等)。
(2)如何设计
1)DTD文档
<!DOCTYPE orders[
<!ELEMENT orders (order+)>
<!ELEMENT order (name,flight,time,dest)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT flight (#PCDATA)>
<!ELEMENT time (#PCDATA)>
<!ELEMENT dest (#PCDATA)>
<!ATTLIST order type CDATA #REQUIRED>
]>
类似于dtd文档,也是用来定义xml文档的结构的。只不过,schema使用了xml的语法,并且,比dtd更灵活,能够表示更复杂的数据类型,并且支持命名空间。
3)示例
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE orders[
<!ELEMENT orders (order+)>
<!ELEMENT order (name,flight,time,dest)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT flight (#PCDATA)>
<!ELEMENT time (#PCDATA)>
<!ELEMENT dest (#PCDATA)>
<!ATTLIST order type CDATA #REQUIRED>
]>
<orders>
<order type="vip">
<name>过儿</name>
<flight>mu1748</flight>
<time>8:00</time>
<dest>绝情谷</dest>
</order>
</orders>
5、xpath
(1)xpath是什么?
类似于使用sql语句查询数据库,xpath语句可以用来查询xml文档。
(2)如何使用xpath?
step1,构造dom树。
比如:
SAXReader reader = new SAXReader();
Document doc = reader.read(ips);
step2,调用doc的selectNodes方法,该方法里面填写 xpath语句即可。
比如:
doc.selectNodes("/orders/order/time");
典型的xpath语句
1)从根节点开始查询
比如:
doc.selectNodes("/orders/order/time");
2)以索引的方式查询
比如:
doc.selectNodes("/orders/order[1]/time");
3)依据属性值进行查询
比如:
doc.selectNodes("/orders/order[@type='vip']/time");
4)任意查询(不从根节点开始)
比如:
doc.selectNodes("//name");
5)依据子节点的值进行查询
比如:
doc.selectNodes("/orders/order[flight='ca1008']/dest");