XML入门

第一节:xml的概述

 

Xml的全称是Extensible Markup Language 可扩展标记语言。它是由SGML(Standard Gerneralized Markup language)发展而来的,允许开发者自定标签,可以将标签和内容有效的分离。

(可扩展):相对于标记语言来说它可以自定标签。

 

一、Xmlhtml的区别:

Xml用来传输和存储的数据的。它可以自定义标签.

Html:显示数据<p></p> <p><p>

所以说xml并不是用来代替html,二者的为不同的目的而设计。

 

二、Xml的优势:

1、 简单易用

2、 严格的格式

---xml的基本语法

Xml是平台无关的数据交换语言,Java是平台无关的编程语言,有人为:xmlJava就是天生一对。

 

3、 数据逻辑与显示逻辑分离

 ---看似MVC模式理解

 

三、XmlJavaEE

1、 配置描述

JavaEE 最开始接触的JSP技术,在web.xml中可以配置Servlet,FilterListener体现了xml的应用。

Struts1 struts-config.xml

Hibernate hibernate.cfg.xml   xxx.hbm.xml

Struts2   struts.xml

Spring2.5 bean.xml 

2、 简化的数据交换

 

3、 Web Services

Web Services使用基于xml的消息处理作为数据通讯方式,消除了不同组件模型、操作系统和编程语言之间存在的差异,使异构系统能作为单个计算机网络协同运行。

Csdn webservice编程开发csdn网站

四、Xml的竞争对手:

1、 Jdk1.5 >JavaAnnontation(注解)

2、 轻量级的数据交换格式------JSON(JavaScript Object Notation)

 

 

 

第二节:xml文档规范

 

 

一、Xml文档的分类

1、 格式不良好(malformed)xml文档:完全没有遵守xml文的基本规范的xml文档。

2、 格式良好(well-formed)的但无效的xml文档遵守xml文的基本规范,但没有使用dtdschema定义语义约束的xml文档。

3、 有效(valid)xml文档:遵守xml文的基本规范,并使用dtdschema定义语义约束,而且也完全遵守了dtdschema定义语义约束的xml文档。

 

二、Xml的语法

        一个XML文件分为如下几部分内容:

        文档声明

        元素

        属性

        注释 

        CDATA区、特殊字符

        处理指令(processing instruction

三、Xml的声明

最简单声明

 <?xml version=1.0?>

 

Encoding属性:字符编码 如果没有指定默认的是UTF-8编码

常见的字符集:

简体中文:GBK GB2312

繁体中文: BIG5

西欧字符:ISO8859-1

通用的国际编码:Unicode UTF-8

 

演示案例:

<?xml version="1.0" encoding="UTF-8"?>

<中国>

</中国>

出现了:

解码成字符

 

 字符集错误时的xml文档

新建是一个.txt文档

保存的是.xml UTF-8

默认的编码ANSI

中国

 

写入到硬盘

编码成二进制码

00 11

磁盘文件

Standalone:指定该文档是否需要引用其它资源,属性值只有:yesno

Yes:独立

No:不独立

 

 

四、Xml元素的基本规则

  元素是xml文档的基本单元,xml文档就是一个一个层层嵌套的元素组成的。整个的xml文档从根元素开始,根元素包含若干个子元素,而每个子元素又可以包含若干个子元素,从而可以组成一个xml文档。

 

Xml标签语法:

1Xml的标签分为两类:

单标记:<商丘/>

双标记:<中国></中国>

2xml标签的要求:

1、标签名可以有字母(包括非西欧字符)、数字、下划线(_)、中划线(-)、冒号(:)和点号(.)组成,但不能以数字、中划线和点号开头。

2、标签名不能包含<>、,、$等符号

3、标签名种尽量不要出现英文的冒号(:),除非在使用命名空间。

4、标签名不能以字符xmlXML等任意大小写组合开始。

4、 标签名不能包含空格。

5、 标签名区分大小写

3xml标签嵌套子元素:xml允许深度嵌套子元素,只要保证元素之间合理的嵌套即可.而且xml元素可以嵌套多个重名的子元素,这多个子元素之间是有序的。

第一个:xml

<中国>

<北京>

<海淀/>

<朝阳></朝阳>

<朝阳></朝阳>

</北京>

</中国>

第二个xml

<中国>

<北京>

<朝阳></朝阳>

<朝阳></朝阳>

<海淀/>

</北京>

</中国>

 

4、空元素:空元素不可以接受子元素,也不可以接受字符串内容。

第三个xml

<book>

<name>redarmy</name>

<content/> :备注:空元素 但可以接受属性,而且可以接受多个属性

</book>

 

<book>

<name>redarmy</name>

<content></content> :备注它包好的是一个空格 空格也是字符

</book>

例如空元素接受属性:

<book name=Java建议” price=30/>

5、字符数据

<book>

<computer>Struts2开发详解</computer>

<computer>

Struts2开发详解

</computer>

</book>

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

如果文本字符中包含了一些特殊的字符,例如<&由于这些字符都有特殊的含义,因此直接在xml文档中使用该字符串将引起文档的混乱。

<表达式>

<比较符>1+3<6</比较符>

</表达式>

代表的是文本字符串中包含了特殊的字符 

有以下两种方法解决:

1、使用实体引用:用另一个特殊符号代替这些特殊符号

2、使用CDATA标记:将整个文档定义成字符串。

 

1、 使用实体引用

解决如下:

<?xml version="1.0" encoding="UTF-8"?>

<表达式>

<比较符>1+3<6</比较符>

</表达式>

2、 使用CDATA标记

在特殊标记CDATA,所有的特殊字符,甚至是有效的元素都将被当成简单的字符串处理。实体引用也会失去作用,变成直接的文本。

CDATA的语法格式如下:

<![CDATA[文本内容]]>

<?xml version="1.0" encoding="UTF-8"?>

<表达式>

<比较符>

<![CDATA[

1+3<6

]]>

</比较符>

</表达式>

备注:由于xml文档根本不会对CDATA标记内容进行任何解析,因此在CDATA内可以放置任何内容,其中的内容永远不会出错。

 

6、 注释

Xml文档还可以加入解释用的字符数据,这些解释用的字符串不会被xml解析器处理。这些解释用的文本称为注释。Xml的文档注释与html完全一致。

Xml注释的语法格式如下:

<!--注释字符串 -->

Xml的注释允许包含元素和标签。

 

注意:

1、 Xml的注释不能够放在标签体内。

2、 不要把xml文档放在xml文档声明之前 xml文档的声明永远在第一行

3、 不在注释中使用双中划线(--)

 

7、 处理指令

处理指令,简称PI processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。

处理指令用于给处理xml文档的应用程序提供信息,告诉处理程序应该如何处理该文档。一个完备的xml文档的处理程序,可以读取xml文档的处理指令,并根据处理指令进行相应处理,或将它传给下一个程序。

 

Xml处理指令的格式如下:

<?处理指令名 处理指令信息?>

 

8、 属性

xml属性的特征:

1、 xml元素的属性必须有属性值,属性值必须用引号引起来。

2、 同一个xml元素里不能有多个同名的属性

3、 Xml元素里的多个属性之间没有先后顺序。

<book>

<isbn>123456780</isbn>

<book_name>Java讲义</book_name>

<price>99</price>

</book>

比如说 这个book本身就有 isbn book_name price的属性

那么

<book isbn=”” book_name=”” price=””/>

 

Xml必须有一个根元素。

 

Xml文档的整体结构

1、 必须有一个根元素(有且只有一个)

2、 元素必须合理结束

3、 元素之间必须合理嵌套

4、 元素的属性必须有属性值

 

只要不满足上面的条件就是一个格式不良好的xml文档

只要满足上面的条件就是一个格式良好的xml文档

并且遵守了dtd或者schema就是一个有效的xml文档。

Xml文档是一种标准的结构化文档,可以转换成DOM(Document Object Model),其根节点对应DOM树的根节点。

 

<book>   

<computer>

<name>网上介绍</name>

<author>redarmy</author>

</computer>

 

<computer>

<name>网上介绍</name>

<author>redarmy</author>

 

</computer>

</book>

 

                                                                              第三节 DTD详解

目前有两种xml文档定义的语义约束

1、 Dtd document type definition

2、 xml schema

 

xml语义约束

web.xml

<serlvet>

<servlet-name></servlet-name>

<servlet-class></servlet-class>

</servlet>

<servlet-mapping>

<servlet-name></servlet-name>

<url-pattern></url-pattern>

</servlet-mapping>

Dtd约束包括那几个方面

1、 定义xml的根元素、内容和结构

2、 定义xml文档中可以接受那些元素

3、 定义xml文档里每个元素接受的合法内容,包括是否为空,是可以是文本,可以接受那些子元素,子元素出现的顺序和子元素出现次数等。

4、 定义xml文档中每个元素能接受那些属性

5、 定义xml文档中每个属性的类型,能接受那些值,以及元素对属性的约束等。

6、 定义属性的固定值和默认值

7、 定义xml文档或dtd中可以使用的实体。

Dtd有作用

1、 Dtd采用了非xml的语法描述语义约束,可以提供如下功能

2、 通过使用dtd可以让每个xml文件带有一个有关其自身的格式描述

3、 不同的公司、组织可一致地使用某个标准的dtd来交换数据

4、 应用程序也可以使用某个标准的dtd验证所介绍的xml文档是否符合语义约束

5、 开发者也可以使用dtd来验证所创建的xml文档。 

 

引入dtd的方式

1、 内部dtd

2、 外部dtd

3、 公用dtd

1、 内部dtd

  语义约束与xml文档的内容放在同一个xml文档中。内部dtd紧跟在xml声明和处理指令之后,以<!DOCTYPE 开始,]>结束。其语法格式如下

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!DOCTYPE 根元素名[

元素描述

]>

xml文档主体部分

 

2、 外部dtd

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!DOCTYPE 根元素名 SYSTEM "外部的DTDURL地址">

 

3、 公用dtd

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<!DOCTYPE 根元素名 PUBLIC "DTD的标识名" "公用的DTDURL地址">

 

定义一个元素

<!ELEMENT 元素名(子元素,)>

<!ELEMENT 元素名(#PCDATA)>

 

 

DTD的文档结构如下:

第一行是DTD声明部分 该声明与xml文档的生命语法格式相同

0到多个注释部分,DTD注释与xml文档的注释完全相同

0到多个<!ELEMENT..>定义 每个它就是一个xml元素

0到多个<!ATTLIST..>定义每个它就是一个xml元素的属性

0到多个<!ENTITY..>定义每个它就是一个实体

0到多个<!NOTATION..>定义 每个它定义一个符号

彼此之间完全独立,无须相互嵌套。

 

1、 定义元素

元素类型的定义的全称是:Element Type Defintion,简称ETD,它不但会定义每个文件中可能存在的元素,给元素的名称,而且会定义元素的具体类型。

元素类型描述主要有5种:

1、 任意类型

可以是以下四种的内容

语法格式:

<!ELEMENT 元素名 ANY>

2、 字符串值

3、 空元素 <br/>

4、 包含子元素

5、 混合类型

 

<!--任意类型-->

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE book[

<!ELEMENT book ANY>

]>

 

无效的xml文档但是格式良好的xml文档

 

<!--空元素-->

<!ELEMENT 元素名 EMPTY>

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE book[

<!ELEMENT book EMPTY>

]>

有效的xml文档

 

 

<!--定义字符串内容的元素-->

<!ELEMENT 元素名 (#PCDATA)>

 

<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT book (computer)*>

<!ELEMENT computer (book_name,price,author)>

<!ELEMENT book_name (#PCDATA)>

<!ELEMENT price (#PCDATA)>

<!ELEMENT author (#PCDATA)>

 

 

<!--定义混合内容-->

<!ELEMENT 父元素名(#PCDATA|子元素1|子元素2|子元素3|........)*> 并不是互斥

|无序的重复出现 出现的次数不受限制

注意:1#PCDATA必须放在最前面

2#PCDATA只能用|与各个子元素分隔

3、不要试图在各个子元素之后添加?*+等表示频率的修饰符

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE book[

<!ELEMENT book (computer)*>

<!ELEMENT computer (#PCDATA|book_name|price|author)>

<!ELEMENT book_name (#PCDATA)>

<!ELEMENT price (#PCDATA)>

<!ELEMENT author (#PCDATA)>

]> 

<book>

<computer>

<book_name>JavaWeb开发</book_name>

<price>30.0</price>

<author>redarmy_chen</author>

</computer>

 

<computer>

<book_name>CSS应用程序的开发</book_name>

<price>1000</price>

<author>redarmy_Chen</author>

</computer>

</book>

 

定义子元素

1、 有序的子元素(,)

(,)用于分隔有序的子元素

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE book[

<!ELEMENT book (computer)*>

<!ELEMENT computer (book_name,price,author)>

<!ELEMENT book_name (#PCDATA)>

<!ELEMENT price (#PCDATA)>

<!ELEMENT author (#PCDATA)>

]> 

<book>

<computer>

<book_name>JavaWeb开发</book_name>

<price>30.0</price>

<author>redarmychen</author>

</computer>

 

<computer>

<book_name>CSS应用程序的开发</book_name>

<price>1000</price>

<author>redarmy_Chen</author>

</computer>

 

</book>

2、 互斥的子元素

互斥的子元素表明一系列的子元素中只能出现其中之一。

(|)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE book[

<!ELEMENT book (computer)*>

<!ELEMENT computer (book_name|price|author)>

<!ELEMENT book_name (#PCDATA)>

<!ELEMENT price (#PCDATA)>

<!ELEMENT author (#PCDATA)>

]> 

<book>

 

<computer>

<book_name>JavaWeb开发</book_name>

</computer> 

<computer>

<price>30</price>

</computer>

 

<computer>

<author>redarmy_Chen</author>

</computer>

 

</book>

 

3、 子元素出现的频率

+:一次或多次 (+)

?: 0次或一次 (?)

*: 0次或多次 (*)

注意:混合类型的频率只能安如下方式加:

<!ELEMENT computer (#PCDATA|book_name|price|author)*>

//#PCDATA以它开头的是混合类型频率只能在最后加 

 

4、 组合子元素

<!ELEMENT computer (book_name|price|author)>

 

5、 无序的子元素

 

 

2、 定义属性

<!ATTLIST属性所属元素 属性名 属性类型[元素对属性的约束][默认值]>

元素对属性的约束|默认值是可选的对于它们的使用有如下的情况:

1、 在没有指定元素对属性的约束,必须为该属性增加默认值。

2、 在元素对属性的约束是:#REQUIRED时,不能为该属性指定默认值。

3、 在元素对属性的约束是:#IMPLIED时,不能为该属性指定默认值

4、 在元素对属性的约束是:#FIXED时,必须为该属性指定默认值

#REQUIRED:必须的属性

#IMPLIED:可有可无

#FIXED:固定值

<水果 品名=苹果” 颜色=绿色>关于水果的元素</水果>

属性类型

类型

说明

CDATA

字符串数据 character data

(e1|e2|e3)

该属性是一系列枚举值之一

ID

Id必须是唯一的

IDREF

引用自己已经定义的id

IDREFS

空格区分多个id

ENTITY

是一个外部的实体

ENTITIES

多个外部实体,多个外部实体之间用空格分隔

Xml:

预定义的xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE购物车[

<!ELEMENT购物车 (*,水果*,玩具)>

<!ELEMENT EMPTY>

<!ELEMENT水果 EMPTY>

<!ELEMENT玩具 EMPTY>

 

<!ATTLIST类型 (鸡肉|牛肉|狗肉#REQUIRED>

<!ATTLIST水果 类型 (苹果||香蕉#IMPLIED>

<!ATTLIST玩具类型 CDATA #FIXED "地雷">

 

]>

 

<购物车>

<类型="狗肉"/>

<水果/>

<玩具类型="地雷"/>

</购物车>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值