一、XML语言
1、什么是XML语言?
Extensible Markup Language,翻译为可扩展标记语言。Xml技术是w3c组织发布的,目前遵循的是W3C组织在2000年发布的XML1.0规范。
2、XML语言用语解决什么类型的问题?
- xml语言出现的根本目标是,描述有关系的数据。
- 在xml语言中,允许用户自定义标签。一个标签用于描述一段数据,一个标签可以分为开始标签和结束标签,子啊开始标签和结束标签之间,又可以使用其他标签米啊搜狐其他数据,以此来实现数据关系的描述。
二、XML语法
(一)、文档证明
1、在编写XML文档时,需要先使用文档声明,声明XML文档的类型。
2、最简单的声明语法:<?xml version="1.0" ?>
3、用encoding属性说明文档的字符编码:<?xml version="10" encoding="GB2312" ?>
4、用standalone属性说明文档的独立性:<?xml version="1.0" encoding="GB2312" standalone="yes" ?>
(二)、元素
1、XML元素指xml文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写格式:
- 包含标签体:<a>itcast</a>
- 不包含标签体:<a></a>简写成</a>
- 如:<a>welcome<b>itcast</a></b>
- 区分大小写:<P>和<p>是两个不同的标记
- 不能以数字和_开头
- 不能以XML(或Xml,或xml等)开头
- 不能包含空格
- 名称中间不能包含冒号(:)
(三)、属性
1、一个标签可以有多个属性,每个属性都有他自己的名称和取值
2、属性值一定要用双引号("")或单引号('')引起来
3、定义属性必须遵守和标签相同的命名规范
4、在XML技术中,标签属性所代表的信息,也可以改用子元素的形式来描述
例如:<input name="text">改写成<input> <name>text</name> </input>
(四)、注释
1、XML文档中注释采用:<!--注释-->
2、注意事项
- XML声明之前不能有注释
- 注释不能嵌套
(五)、CDATA、特殊字符
1、在编写XML文件时,有些内容可能不想让解析引擎执行,而是当做原始内容处理。遇到此种情况,可以把这些内容放到CDATA区里,对于CDATA 区域的内容,XML解析程序不会处理,而是直接原封不动的输出。
2、语法:<![CDATA[内容]]>
如:<![CDATA[<itcast><br/></itcast>]]>
3、转义字符:对于一些单个字符,若想显示其原始字样,也可以使用转义的形式处理
- &:&;
- <:<;
- >:>;
- ":";
- ':&apos;
(六)、处理指令
1、处理指令:简称PI(processing instruction),用来指挥解析引擎如何解析XML文档内容。
例如,在XML文档中,可以使用xml-stylesheet指令,通知xml解析引擎,应用css文件显示xml文档内容
<?xml-stylesheet type="text/css" href="1.css"?>
2、处理指令必须以<?作为开头,以?>作为结尾,XML声明语句就是最常见的一种处理指令。
三、XML约束
(一)、XML约束简述
1、什么是XML约束?
在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这就称之为XML约束。
2、常见的约束技术
- XML DTD(Document Type Definition 文档类型定义)
- XML Schema
1、变成校验XML文档正确性
- IE5以上浏览器内置了XML解析工具:Microsort.XMLDom,开发人员可以编写javascript代码,利用这个解析工具装载xml文件,并对xml文件进行dtd校验。
- 创建XML文档解析器对象:var xmldoc = new ActiveXObject("Microsoft.XMLDom");
- 开启XML校验:xmldoc.validateOnParse = "true";
- 装载XML文档:xmldoc.load("book.xml");
- 获取错误信息:xmldoc.parseError.reason,xmldoc.parseError.line;
- DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE[
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
]>
- XML文件使用DOCTYPE声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式:
(1)、当引用的文件在本地时,采用如下方式:<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">
例如:<!DOCTYPE 书架 SYSTEM "book.dtd">
(2)、当引用的文件是公共文件时,采用如下方式:<!DOCTYPE 文件根结点 PUBLIC "DTD名称" "DTD文件的URL">
例如:<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
3、DTD约束的语法细节
- 元素定义
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
- 属性定义
- 实体定义
<!ELEMENT 个人信息 (%TAG_NAMES; | 生日)>
<!ELEMENT 客户信息 (%TAG_NAMES; | 公司名)>
(三)Schema约束
1、XML Schema也是一种定义和描述XML文档内容和结构的谋杀语言,其出现是为了克服DTD的局限性。
2、Schema VS DTD:
- XML Schema符合XML的语法结构
- DOM/SAX等XML API很容易解析出XML Schema中的内容
- Schema对名称空间支持的非常好
- Schema比DTD支持更多的数据类型,并支持用户自定义的新数据类型
- Schema定义约束的能力非常强大,可以对XML实例文档做出细致的语义限制
- Schema不能像DTD一样定义实体,比DTD更复杂,但Schema现在已是w3c组织的标准,它正在逐步取代DTD
- Schema文件自身就是一个XML文件,但它的扩展名通常为.xsd
- 一个Schema文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档
- 和xml文件一样,一个Schema文档也必须有一个根节点,但这个根节点的名称为Schema
- 编写了一个Schema约束文档后,通常需要把这个文件中申明的元素绑定到一个URI地址上,在Schema技术中一个专业术语来描述这个过程,即把Schema文档中声明的元素绑定到一个名称空间上,以后XML文件就可以通过URI(即名称空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束
<xs:element name='作者' type='xs:string' />
<xs:element name='售价' type='xs:string' />
5、名称空间的概念
(1)在Schema中,每个约束模式文档都可以被赋以一个唯一的名称空间,名称空间用一个唯一的URI(Uniform Resource Identifier,统一资源标识符)表示。在XML文件中写标签时,可以通过名称空间声明(xmlns),来声明当前编写的标签来自哪个Schema约束文档
注意:名称空间的名字语法很容易让人混淆,尽管以http://开始,哪个URL并不只想一个包含模式定义的文件。事实上,这个URL(http://www.itcast.cn)根本没有只想任何文件,只是一个分配的名字。
(2)为了在一个XML文档中声明它所遵循的Schema文件的具体位置,通常需要在XML文档中的根节点中使用shemaLoction属性来指定,例如:
<itcast:书架 xmlns:itcast="http://wwwitcast.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLoction="http://www.itcast.cn book.xsd"
>
(3)schemaLoction此属性有两个值,第一个值是需要使用的名称空间,第二个值是供命名空间使用的XML schema文件的位置,两者之间用空格分割。
注意:使用shemaLocation属性时,也需要指定该属性来自哪里。
(4)使用默认名称空间:xmlns="URI"
<书架 xmlns="http://www.it315.org/xmlbook/schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=“http://www.itcast.cn book.xsd"
>
<书></书>
</书架>
(5)使用名称空间引入多个schema文档
<书架 xmlns="http://www.it315.org/xmlbook/schema"
xmlns:demo="http://www.it315.org/demo/schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.it315.org/xmlbook/schema
http://www.it315.org/xmlbook.xsd
http://www.it315.org/demo/schema http://www.it315.org/demo.xsd">
(6)不实用名称空间引入schema文档
<书架 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="xmlbook.xsd">
(7)在schema文档中声明名称空间
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www. itcast.cn"
elementFormDefault="qualified">
<xs:schema>
四、XML编程
(一)、XML解析技术概述
1、xml解析技术分为两种:dom和sax
- dom:(Document Object Model,即文档对象模型)是w3c组织推荐的处理XML的一种方式
- sax:(Simple AIP for Xml)不是官方推荐的,但他是XML社区事实上的标准,几乎所有xml解析器都支持它
- Crimson
- Xerces
- Aelfred2
- Jaxp
- Jdom
- dom4j
- 调用DocumentBiulderFactory.newInstance()方法创建一个DOM解析器的工厂
- 调用工厂对象的newDocumentBiulder方法得到dom解析器对象
- 调用DOM解析器对象的parse方法解析xml文档,得到代表整个文档的Document对象,这样可以利用DOM特性操作整个xml文档
- Node对象提供了一些列常量来代表节点的类型,当开发人员获得某个Node类型后,就可以把Node节点转换成相应的节点对象(Node的子类对象),以便于调用其特有的方法。
- Node对象提供了相应的方法区获得他的父节点或子节点,编程人员通过这些方法就可以读取整个XML文档的内容、或添加、修改、删除XML文档的内容。
- 遍历所有节点
- 查找某一个节点
- 删除节点
- 更新节点
- 添加节点
- 解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档
- 解析器采用SAX方式在解析某个XML文件时,它只要解析到XML文档中的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数,传递给事件处理器。
- 事件处理器由程序员编写,程序员通过时间处理器中方法的参数,就可以轻松的得到SAX解析器解析到的数据u,从而可以决定如何对数据进行处理。
- 使用SAXParserFactory创建SAX解析工厂:SAXParserFactory spf = SAXParserFactory.newInstance();
- 通过SAX解析工厂得到解析器对象:SAXParser sp = spf.newSAXParser();
- 通过解析器对象得到一个XML的读取器:XMLReader = sp.getXMLReader();
- 设置读取器的事件处理器:xmlReader.setContentHandler();
- 解析XML文件:xmlReader.parse("book.xml");
- 读取XML文件,获得document对象:
- 解析XML形式的文本,得到document对象:
- 主动创建document对象:
- 获取文档的根节点:
- 取得某个节点的子节点:
- 取得节点的文字:
- 取得某个节点下的所有名为“member”的子节点,并进行遍历
- 对某个节点下的所有子节点进行遍历
- 在某节点下添加子节点
- 设置节点文字
- 删除某节点
- 添加一个CDATA节点
- 取得某节点下的某属性
- 取得属性的文字
- 删除某属性
- 便利某节点的所有属性
- 设置某节点的属性和文字
- 设置属性的文字
- 文档中全为英文,不设置编码,直接写入
- 文档中含有中文,设置编码格式写入的形式
- 得到插入位置的节点列表
- 调用list.add(index,element),由index决定element的插入位置
- Element元素可以通过DocumentHelper对象得到。
- 将字符串转化为XML
- 将文档或者节点的XML转化为字符串