02 XML详解

一、xml入门

1. 什么是xml

l  xml全称为ExtensibleMarkup Language,可扩展标记语言。xml技术是W3C组织发布的,目前推荐遵循的是W3C组织于2000发布的XML1.0规范。 html 也是w3c组织发布的。

 

l  xml可用于保存关系数据

 

l  xml也经常被用作软件的配置文件,描述软件模块之间的关系

 

l  一个软件在设计的时候不能完全确定将来启动的具体模块,为了提高程序的灵活性,它所启动的模块通常是由其配置文件来决定的,这样的情况用xml文件最合适不过

    例如: 一个软件在启动的时候需要A、B两大模块,A、B模块在启动时又需要启动程序a1、a2和b1、b2

 

2. xml用于描述关系型数据

 

 

二、xml语法

1. 文档声明

l  在编写XML文档时,需要先使用文档声明,声明XML文档的类型

 

l  最简单的声明语法:

    <?xmlversion="1.0" ?>

 

l  用encoding属性说明文档的字符编码:

    <?xmlversion="1.0" encoding=“gb2312"?> 

    (xml文档以什么编码保存,就要以什么编码打开)

 

l  用standalone属性说明文档是否独立:

    <?xmlversion="1.0" encoding=“gb2312"  standalone="yes" ?>

    一般来讲,xml文件会伴随着一个约束文件

 

2. xml元素

什么是xml元素

l  XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签,一个标签有如下几种书写形式,例如:

    包含标签体:<a>www.itcast.cn</a>

    不含标签体的:<a></a>, 简写为:<a/>

 

l  一个标签中也可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套 ,例如:

       <a>welcometo <b>www.it315.org</a></b>

 

l  格式良好的XML文档必须有且仅有一个根标签,其它标签都是这个根标签的子孙标签。

 

l  对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。

 

xml元素的命名规范

一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:

l  区分大小写,例如,<P>和<p>是两个不同的标记。

l  Html不区分大小写

l  线不能以数字或"_" (下划)开头。

l  不能以xml(或XML、或Xml 等)开头。

l  不能包含空格。

l  名称中间不能包含冒号(:)。

l  把握一个原则:全部用英文字母,实在不得已后面加点数字

 

3. 元素的属性

l  一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如:<input name=“text”>

 

l  属性值一定要用双引号(“)或单引号(‘)引起来

 

l  定义属性必须遵循与标签相同的命名规范 (全用英文)

 

l  多学一招:在XML技术中,标签属性所代表的信息,也可以被改成用子元素的形式来描述,例如:

       <input>

           <name>text</name>

       </input>

 

4. xml中的注释

l  xml文件中的注释采用:“<!--注释-->” 格式。

 

l  注意:

    XML声明之前不能有注释

    注释不能嵌套,例如:

    <!--大段注释

    ……

       <!--局部注释-->

    ……

    --> 

 

5. CDATA区

l  在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理。

 

l  遇到此种情况,可以把这些内容放在CDATA区里,对CDATA

    区域内的内容,XML解析程序不会处理,而是直接原封不动的输出。(c : Character)

 

l  语法:<![CDATA[ 内容 ]]>

l  例:

    <![CDATA[

       <itcast>

           <br/>

       </itcast>

    ]]>

 

6. 转义字符

l  对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。

 

重点:

必须有文档声明, encoding指定文件的编码

严格区分大小写

CDATA区域  <![CDATA[……]]>

关键字符需要转义

三、xml文档约束

l  什么是XML约束

    在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。

 

l  为什么需要XML约束

    将xml文档作为配置文件时,xml中的元素写法一定不是任意的,

    必须要遵循软件的要求来写,这样的xml文档软件才能识别,例如

    在写tomcat服务器的配置文件时,哪个元素是用于指定端口,哪个

    元素用户指定主机名,这些一定是事先就约定好的,这些约定就

    需要通过xml约束技术来完成

 

l  常用的约束技术

    XML DTD

    XML Schema

 

四、 DTD约束

1. 定义

DTD(Document Type Definition),全称为文档类型定义。

l  下面的例子为 xml 和对应的 dtd 约束   dtd文档必须为 utf-8 编码

book.xml

<?xmlversion="1.0" ?>

<!DOCTYPE 书架 SYSTEM "book.dtd">

<书架>

<书>

    <书名>Java就业培训教程</书名>

    <作者>张孝祥</作者>

    <售价>39.00元</售价>

</书>

<书>

    <书名>JavaScript网页开发</书名>

    <作者>张孝祥</作者>

    <售价>28.00元</售价>

</书>

</书架>

 

book.dtd

<!ELEMENT 书架 (书+)>

<!ELEMENT 书 (书名,作者,售价)>

<!ELEMENT 书名 (#PCDATA)>

<!ELEMENT 作者 (#PCDATA)>

<!ELEMENT 售价 (#PCDATA)>

 

 

l  可以在在xml文件内直接编写DTD

<?xmlversion="1.0" encoding="UTF-8"standalone="yes"?>

<!DOCTYPE 书架 [

<!ELEMENT 书架 (书+)>

<!ELEMENT 书 (书名,作者,售价)>

<!ELEMENT 书名 (#PCDATA)>

<!ELEMENT 作者 (#PCDATA)>

<!ELEMENT 售价 (#PCDATA)>

]>

<书架>

<书>

    <书名>Java就业培训教程</书名>

    <作者>张孝祥</作者>

    <售价>39.00元</售价>

</书>

...

</书架>

 

 

2. 如何引入dtd约束

l  XML文件使用 DOCTYPE 声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式:

 

l  当引用的文件在本地时,采用如下方式:

    <!DOCTYPE文档根结点 SYSTEM"DTD文件的URL">

例如: <!DOCTYPE 书架 SYSTEM “book.dtd”>。

 

l  当引用的文件是一个公共的文件时,采用如下方式:  

    <!DOCTYPE 文档根结点 PUBLIC "DTD名称""DTD文件的URL">

 

    例如:<!DOCTYPE web-app PUBLIC

    "-//SunMicrosystems, Inc.//DTD Web Application 2.3//EN“

     "http://java.sun.com/dtd/web-app_2_3.dtd">

 

3. 元素的定义

l  在DTD文档中使用ELEMENT声明一个XML元素,

    语法格式如下所示:

    <!ELEMENT 元素名称元素类型>

 

l  元素类型可以是元素内容、或类型

如为元素内容:则需要使用()括起来,如

<!ELEMENT 书架 (书名,作者,售价)>  复杂元素

<!ELEMENT 书名(#PCDATA)>  简单元素

如为元素类型,则直接书写,如下:

        <!ELEMENT 书架 EMPTY>

EMPTY:用于定义空元素,例如<br/><hr/>

ANY:表示元素内容为任意类型。

l  元素内容中可以使用如下方式,描述内容的组成关系

    用逗号分隔,表示内容的出现顺序必须与声明时一致。

    <!ELEMENTMYFILE (TITLE,AUTHOR,EMAIL)>

     用|分隔,表示任选其一,即多个只能出现一个

    <!ELEMENTMYFILE (TITLE|AUTHOR|EMAIL)>

l  在元素内容中也可以使用+、*、?等符号表示元素出现的次数:

       +:一次或多次 (书+)

       ?: 0次或一次 (书?)

       *:0次或多次 (书*)

l  也可使用圆括号( )批量设置,例

    <!ELEMENTMYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>

 

4. 属性的定义

l  xml文档中的标签属性需通过ATTLIST为其设置属性

    语法格式 (Attribute)

       <!ATTLIST元素名

        属性名1属性值类型 设置说明

         属性名2属性值类型 设置说明

        ……

       >

    举例:

<!ATTLIST 商品

    类别 CDATA #REQUIRED

    颜色 CDATA #IMPLIED

    对应XML文件:

           <商品类别="服装" 颜色="黄色">…</商品>

           <商品类别="服装">…</商品>

l  设置说明:

    #REQUIRED:必须设置该属性

    #IMPLIED:可以设置也可以不设置

    #FIXED:说明该属性的取值固定为一个值,在XML 文件中不能为该属性设置其它值。但需要为该属性提供这个值

    直接使用默认值:在 XML 中可以设置该值也可以不设置该属性值。若没设置则使用默认值。 

l  举例:

     <!ATTLIST 页面作者

         姓名 CDATA #IMPLIED

         年龄 CDATA #IMPLIED

         联系信息 CDATA #REQUIRED

         网站职务 CDATA #FIXED "页面作者"

         个人爱好 CDATA "上网"

      >

5. 常用属性值类型

l  CDATA:表示属性值为普通文本字符串

l  ENUMERATED

l  ID

 

属性值类型之ENUMERATED

l  属性的类型可以是一组取值的列表,在 XML 文件中设置的属性值只能是这个列表中的某个值(枚举)

<?xml version = "1.0"encoding="GB2312" standalone="yes"?>

<!DOCTYPE 购物篮 [

    <!ELEMENT肉 EMPTY>

    <!ATTLIST肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">

]>

<购物篮>

    <肉 品种="鱼肉"/>

    <肉 品种="牛肉"/>

    <肉/>

</购物篮>

属性值类型之ID

l  表示属性的设置值为一个唯一值。

l  ID 属性的值只能由字母,下划线开始,不能出现空白字符

 

l  记住,不能数字开头,尽量用英文

 

<?xml version= "1.0" encoding="GB2312" ?>

 

<!DOCTYPE 联系人列表[

<!ELEMENT 联系人列表 ANY>

<!ELEMENT 联系人(姓名,EMAIL)>

<!ELEMENT 姓名(#PCDATA)>

<!ELEMENT EMAIL(#PCDATA)>

<!ATTLIST 联系人编号 ID #REQUIRED>

]>

 

<联系人列表>

<联系人编号=“a1">

    <姓名>张三</姓名>

    <EMAIL>zhang@it315.org</EMAIL>

     </联系人>

<联系人编号=“a2">

    <姓名>李四</姓名>

    <EMAIL>li@it315.org</EMAIL>

</联系人>

</联系人列表>

 

6.实体的定义

l  实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。

 

l  在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。

 

l  实体可分为两种类型:引用实体和参数实体。

 

引用实体 

l  引用实体主要在 XML 文档中被应用

 

l  语法格式:

    <!ENTITY 实体名称 “实体内容” >:直接转变成实体内容

 

l  引用方式: &实体名称;

 

l  举例:

    <!ENTITYcopyright “I am aprogrammer">

     ……

     &copyright;

 

参数实体 

l  参数实体被 DTD 文件自身使用

 

l  语法格式:

  <!ENTITY % 实体名称"实体内容" >

 

l  引用方式:

%实体名称;

 

l  举例:

     <!ENTITY % TAG_NAMES "姓名 | EMAIL | 电话 | 地址">

       ……

     <!ELEMENT 客户信息 (%TAG_NAMES; | 公司名)>

 

五、XML Schema 约束

 

六、xml解析

l  XML解析方式分为两种:dom和sax

    dom:(Document ObjectModel, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。

    sax: (Simple API forXML) 不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。

 

l  XML解析器

    Crimson(sun)、Xerces(IBM)、Aelfred2(dom4j)

l  XML解析开发包(API)

    Jaxp(sun)、Jdom、dom4j(全新的api)、pull解析(Andriod的sdk自带pull解析)

 

1. jaxp 解析

l  JAXP 是sun公司推出的一套解析XML文档的API,该API是J2SE的一部分,它由javax.xml、org.w3c.dom 、org.xml.sax包及其子包组成

 

l  JAXP支持两种方式(DOM和SAX)对XML文档进行解析,两种方式思路类似,都需要通过调用工厂类得方法来获得解析器,进而通过解析器对文档进行解析

Dom解析

l  通过工厂类DocumentBuilderFactory的newDocumentBuilder方法来获得解析器对象

DocumentBuilder

l  调用parse方法对文档进行解析,获得代表整个文档的Document

    对象,进而获得代表文档中的其他元素节点的对象

l  Node对象代表节点,它所有元素类型的父类

l  Element对象表示元素节点

l  Attr对象表示属性节点

l  Text对象表示文本节点

l  Comment对象表示注释节点

l  Transformer对象用于将Document对象重新写入xml文档

Sax解析

通过事件触发的方式,不需要加载整篇文档,解析器解析到xml的每个组成部分都会触发不同的方法

在解析文档之前,需要实现绑定事件处理器

 

2. pull解析

l  进行 Android 开发时,sdk中对pull解析提供了支持

l   pull 采用事件触发的方式解析 xml 文档

l   pull 解析文档时需要使用XmlPullParser对象,通过工厂类来获得

l   pull 创建新文档需要使用XmlSerializer对象,设置各种节点,通过setOutput方法写入流

 

3.dom4j解析

l  Dom4j是一个非常优秀的Java XMLAPI,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,

    例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。

    查看 api 文档完成对 xml 的增删改查

 

 

 

 

 

使用dom方式解析一个xml文件

 

1、 创建工厂

2、 创建解析器对象

3、 解析xml文档  获得代表整个xml文档的document对象

4、 查看第二本书的书名

5、 更新XML文件(需要Transformer类)

 

使用SAX方式解析XML文件

1、 通过工厂(SAXParserFactory)类获得解析器

2、 获得内部读取器Reader

3、 绑定内容处理器

4、 读取xml文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值