1、XML(Xtensible markup language可扩展的标记 语言)是什么
(1) 是一种基于文本的通用的数据保存的格式。
a,通用: 即以XML格式保存的数据,可以被其它任何的程序来处理 。
比如:一个点,在java语言里面,可以用一个类Point表示:
Class Point{
int x;
int y;
...
}
那么,一个Point对象要保存下来,可以使用如下几种方式:
方式一: 序列化 (不通用,因为序列化是java语言特有的)。
方式二:数据库(通用)
方式三:自定义一个协议(比如,将数据保存在一个文件里面(10,20),很显示,不通用。
方式四:使用XML
<point>
<x>10</x>
<y>20</y>
</point>
b,格式
一对标记加上相应的内容(内容可以是普通的文本,也可以是标记),另外,标记还可以有属性。
c,历史
html: 博纳斯.李 1990年发明的(李也是万维网联盟的创建者,互联网之父)。
<html>
<head></head>
<body>hello kitty</body>
</html>
html --- >xhtml (使用XML语法来重新定义html的结构)
XML采用了与html相似的语法,但是,XML是可扩展的,即可以自定义任意标记。
2、XML的基本语法
1)元素
标记以及标记之间的内容统称为元素 ,比如
<point>
<x>10</x>
<y>20</y>
</point>
2)每一个xml文档, 只允许有一个根元素
3) 元素可以为空 ,称之为空元素,比如 <point></point>,空元素也可以简化为<point/>
4) 元素可以有属性 ,属性值必须用引号括起来,比如
<point type="AA">
<x>10</x>
</point>
注意:属性必须要放在开始标记里面。
5) 元素可以嵌套
<a>
<b></b>
</a>
6) 大小写敏感
<A>
</a> error!
7) 实体
<question>
1+1<2?
</question>
一些特殊的字符,比如<,>,&,'," 需要使用相应的实体来代替。如果不代替,解析器在解析xml时,有可能会出错。
< <
> >
& &
' '
" "
8) CDATA段
<![CDATA[ 不希望解析器解析的内容 ]]>
3、XML的解析
1)常见的解析方式
a, SAX (Simple API for XML),基于事件处理机制,边读取XML文件,边解析,对内存的要求不高,速度也比较快。其它的一些解析工具( DOM4J )会使用SAX作为底层的解析器。
另外,一些内存容器比较小的场合,比如手机系统,可以使用SAX。
b, DOM (Document Object Model),将整个XML文件读入到内存,生成一棵树,然后对棵进行操作。用得少。
c, DOM4J /JDOM
2)Object --- >XML
step1,先设计好xml文档的结构
<order>
<type>VIP</type>
<cust-name>范伟</cust-name>
<flight>CA1748</flight>
<time>8:00 am</time>
<dest>上海</dest>
</order>
也可以
<order type="VIP">
<cust-name>范伟</cust-name>
<flight>CA1748</flight>
<time>8:00 am</time>
<dest>上海</dest>
</order>
step2, 在内存当中创建一个Document 对象(一棵树,根是order)。
step3, 输出
4、XML的设计(DTD Document type definition文档类型定义)
(1)DTD是什么?
定义了 xml文档的结构( 定义了一个xml文档里面根元素是什么,可以出现哪些子元素,哪些属性等等)。
(2)DTD文档的基本结构
<!DOCTYPE 根元素[
<!ELEMENT 根元素 (子元素的名称)>
<!ELEMENT 子元素 (内容描述)>
...
<!ATTLIST 元素 属性名称 CDATA #REQUIRED>
]>
(3)DTD作用
a, 定义xml文档的结构 :有了DTD,就必须按照DTD的要求来写xml文档。
b, 对xml文档的正确性进行验证,如果xml文档没有按照DTD的要求进行编写,则解析器解析时会提示错误 。
一个xml文档符合xml的基本语法,称这个xml文档是正确的,如果这个xml文档还符合DTD文档的要求,则认为这个xml文档是有效的。
5、XPATH
(1)XPATH是什么?
可以将xml看成是数据库,那么XPATH就是sql语句 。
(2)使用XPATH
DOM4j已经实现了XPATH规范。可以使用Document.selectNodes(XPATH语句);
比如:
selectNodes("/orders/order/time");
又比如:
selectNodes("/orders/order[1]/time");
[]里面可以用数字(从1开始)来指定是第几个元素。
又比如:
selectNodes("/orders/order[@type='vvip']/time");
@type='vvip' 指定该元素的属性值必须是vvip