XML学习小计
xml,eXtensible Markup Language,可扩展标记语言。
一、特点:
1、xml是一种非常灵活的语言(跨平台),没有固定的标签,所有的标签都可自定义。
2、通常,xml被用于信息的记录和传递,因此,xml经常被用于充当配置文件。
二、基本格式:
1、声明信息。(用于描述xml的版本和编码方式)
<?xml version="1.0" encoding="UTF-8"?>
2、xml有且仅有一个根元素。(如下面的books元素)
3、xml中对大小写敏感。
4、属性值要用双引号。 <a id='888'></a>
5、标签是成对的而且要正确嵌套。
6、注释写法:<!-- 这里是注释 -->
和html一样
<?xml version="1.0" encoding="UTF-8"?> <!--这是一个声明 -->
<books> <!--这是唯一的根元素-->
<book id="b01">
<name>把自己作为方法</name>
<author>项飙</author>
<price>50.5</price>
</book>
<book id="b02">
<name>php从入门到精通</name>
<author>明日科技</author>
<price>99.8</price>
</book>
</books>
三、DTD
Document Type Definition,文档定义类型
1、用于约束xml的文档格式,保证xml是一个有效的xml。
2、DTD可以分为两种,内部DTD,外部DTD。
使用方式:
1、内部DTD:
-
语法:
<!DOCTYPE 根元素 [元素声明]>
-
元素声明语法:
<!ELEMENT 元素名称 类别>
或 <!ELEMENT 元素名 (子元素[,子元素...])>
类别:
EMPTY---------------------空元素
(#PCDATA)------PCDATA的元素(会解析标签)
(#CDATA)-------------忽略标签
ANY--------------------带有任何内容的元素
-
数量词:
±----------------------表示出现至少一次
?----------------------表示出现0次或1次
*-----------------------表示出现任意次
-
属性声明语法:
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
实例:
<!ATTLIST payment type CDATA "check">
实例:
<?xml version="1.0" encoding="UTF-8"?> <!--声明内部DTD--> <!DOCTYPE scores [ <!ELEMENT scores (student+)> <!--表示元素名为scores,其子元素student至少出现一次--> <!ELEMENT student (name,course,score)> <!--表示元素名为student, 其子元素name,course,score有且仅出现一次--> <!ATTLIST student id CDATA #REQUIRED> <!--表示student元素的id属性属性类型为CDATA,属性默认值为#REQUIRED--> <!ELEMENT name (#PCDATA)> <!--表示name元素的类别为PCDATA--> <!ELEMENT course (#PCDATA)> <!--表示course元素的类别为PCDATA--> <!ELEMENT score (#PCDATA)> <!--表示score元素的类别为PCDATA--> ]> <scores> <student id="1"> <name>王同</name> <course>java</course> <score>89</score> </student> <student id="2"> <name>李佳</name> <course>sql</course> <score>58</score> </student> <student id="3"> <name>张三</name> <course>Oracle</course> <score>40</score> </student> </scores>
2、外部DTD
语法格式与内部DTD一样,区别就是另写一个.dtd文件,然后再xml文档中去引用。
- 引用(声明)语法:
<!DOCTYPE 根元素 SYSTEM "文件名">
- 实例:
-----------------------------scores.dtd文件
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT scores (student+)>
<!ELEMENT student (name,course,score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDATA)>
<!--要注意有空格-->
<!--scores.dtd-->
----------------------------scores.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!--引入外部DTD文件-->
<!DOCTYPE scores SYSTEM "scores.dtd"> <!--scores为根元素,“scores.dtd”为文件名-->
<scores>
<student id="1">
<name>王同</name>
<course>java</course>
<score>89</score>
</student>
<student id="2">
<name>李佳</name>
<course>sql</course>
<score>58</score>
</student>
<student id="3">
<name>张三</name>
<course>Oracle</course>
<score>40</score>
</student>
</scores>
<!--scores.xml-->
DTD实体
实体是用于定义引用普通文本或特殊字符的变量
实体引用是对实体的引用
实体可在内部或外部进行声明
语法:<!ENTITY 实体名称 "实体的值">
DTD例子:
<!ENTITY writer "hello world"> <!--相当于定义了一个字符型的变量-->
<!ENTITY copyright "hello girl">
XML例子:
<suibianxie>&writer;©right;</suibianxie> <!--&writer是对上面变量的引用-->
四、XSD
XML Schema 是DTD的替代者(升级版)
XSD本身也是XML文档
采用XML文档来定义语义约束,比DTD要复杂一些,但功能强大的多。
功能比较强大:
相比DTD,不仅可以定义XML文档的结构,还可以规范文档的内容
1、支持丰富的数据类型
2、允许开发者自定义数据类型
3、可读性强
4、可针对未来需求进行扩展
A、常见的xml解析技术
xml的解析:对xml文件进行操作,包括创建xml、对xml文件进行增删改查操作。
1、DOM解析
官方提供的解析方式,基于xml树解析的
2、SAX解析
民间的解析方式,基于事件的解析
3、JDOM解析
第三方提供的,开源免费的解析方式,比DOM解析块
4、DOM4J解析(比较先进)
第三方提供,开源免费,是JDOM的升级版
性能优异,功能强大,极其易使用
B、DOM4J解析XML
解析xml的入门,是需要先拿到一个Document对象