`
kuyuyingzi
  • 浏览: 53382 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

进入黑马day1-XML简单学习

 
阅读更多

1、XML概述

1.1xml概念:xml本质上是一中数据存储的格式,可以在保存数据的同事保存数据之间的关系。Xml利用标签来保存数据的内容,利用标签之间的嵌套关系来保存数据之间的关系。

1.2xml运用场景

1.2.1数据传输:xml本质上是一段字符串,具有跨平台的特点,所有的开发语言、操作系统都支持,利用这样的特点可以用xml进行跨平台语言的数据传输。

1.2.2作为配置文件来使用:xml在保存数据内容的同时也可以保存数据之间的层级关系,利用这样的特点,xml常被用来作为配置文件使用。

1.3xml文件:将符合xml格式的数据写入到一个文件中去,那这样的文件就是一个xml文件,这样的文件通常都以.xml作为后缀名,请注意,不要将xml狭隘的理解成xml文件,xml除了文件形式还可以以其他的形式存在(内存中构建或网络中传输)。

1.4xml校验:浏览器除了内置html解析器外,还内置了xml解析器,利用这一点,我们可以使用浏览器对xml进行校验。如果xml符合规范,浏览器就可以正常打开,如果不符合规范则提示错误信息和错误行数。

2.xml语法

2.1文档声明:告诉解析器如何解析当前xml,是对当前xml一个声明,文档声明必须在xml的第一行出现,而且只能出现一次。一个不包含文档声明的xml成为格式不良好的xml,虽然很多的解析器都可以解析,但这是不符合规范的、有风险的,所以不建议这样做。

2.1.1<?xml version=”1.0“?>注意:所有的问好空格都必须是英文半角,version代表当前xml所遵循的规范,到目前为止都是1.0规范

2.1.2<?xml version="1.0" encoding="gb2312"?>encoding属性指定当前xml所使用的编码集,解析器将用该编码集去解码xml。xml文件如果保存使用的编码和encoding所指定的编码不同就会导致乱码问题,一定要注意。

2.1.3<?xml version="1.0" standalone="no"?>standalone属性声明当前文档是否是一个独立的文档,默认值为yes,如果该文档要依存于其他文档存在,则应该将此属性设置为no。很多的解析引擎并不会真的参考这个属性,但是标准就是标准,我们要按标准学习

2.2元素

一个标签就是一个xml元素。

2.2.1标签可以分文开始标签和结束标签,在开始标签和结束标签之间的文本称为标签体,如果一个标签既不包含标签体也不包含其他元素,可以将开始标签和结束标签进行合并,这样的标签就叫做自闭标签。

例子:<a>我是标签体</a> <a/>

2.2.2标签可以嵌套子标签,注意所有的嵌套都必须是合理嵌套。

2.2.3格式良好的xml必须包含且只能包含一个根标签。

2.2.4xml元素的命名规范:

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

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

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

不能包含空格。

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

2.3属性

2.3.1一个xml元素可以包含多个属性,一个属性分为属性名和属性值,其中属性值应该用双引号或单引号给引起来。

2.3.2其实一个元素的属性可以转化为该元素的子标签,在表示的内容上是同效的。

例子<chinacaptital="beijing"/>

--->

<china>

<capital>

beijing

</capital>

</china>

2.3.3属性也要遵循和元素相同的命名规范。

2.4注释

<!--注释内容-->

2.4.1注视不能出现在文档声明之前。

2.4.2注视不能再嵌套注释

2.5CDATA区: 被CDATA区包含的内容将不会被解析器解析,而会当作文本来处理。

<![CDATA[

转义的内容

]]>

2.6转义字符

转义字符用来转义xml中特殊字符。

&--》 &amp;

<--》&lt;

>--》&gt;

" --》&quot;

' --》&apos;

注意:CDATA区用来转义一段内容,转义字符只能用来转义单个字符。CDATA转义是通过通知处理器不要去解析其中的内容来实现的,本质传输的还是那个特殊字符。转义字符是将特殊字符用其他字符进行了替代,解析在看到转以后的字符后会用特殊字符去展现,其实他背后传输的是转义后的字符。

2.7处理指令

用来通知解析器以何种方式去解析xml

<?xml-stylesheettype="text/css" href="1.css" ?>

其实文档声明也是一种特殊的处理指令

多学一点:其实xml最初出现的目的就是替代html做网页用的,结果这个家伙太复杂了,对于做前台的开发的美工小mm们太过复杂,所以一直没推行开,反倒是做为配置文件和传输数据的时候用的多一点。

3.xml的约束技术

xml约束技术就是可以提供一个文档用来约束一个xml文档的写法。

市面上最常见的两种xml约束技术是DTD SChema,这两个技术都是标准,都由w3c组织负责发布。

3.1DTD

3.1.1如何在xml中引入DTD

(1)外部引入:dtd约束写在外部文件中,然后在xml中进行引入

<1>本地硬盘中的dtd文件的引入

<!DOCTYPE根元素的名称 SYSTEM"dtd文件路径">

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

<2>引入公共位置上的dtd

<!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">

(2)内部引入:dtd约束直接卸载xml文件中

例子:

<!DOCTYPE书架 [

<!ELEMENT书架 (书+)>

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

<!ELEMENT书名(#PCDATA)>

<!ELEMENT作者(#PCDATA)>

<!ELEMENT 售价 (#PCDATA)>

]>

3.1.2如何约束xml元素

<!ELEMENT元素名称 元素约束>

元素约束:

(1)元素内容:元素内容必须用小括号引起来

<!ELEMENT书架 (.....)>

“,”: 如果括号内的内容用逗号进行分割的话,表明其中的内容必须按顺序出现。

“|”: 如果括号内的内容用竖线进行分割的话,表明其中的内容只能出现其中之一。

#PCDATA:表明该元素中只能写标签体

+:一次或多次 (书+)

?: 0次或一次 (书?)

*: 0次或多次 (书*)

利用括号还可以进行组操作,形成更复杂的元素约束

例子: <!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)>

(2)存放类型

EMPTY:表明当前元素不能再包含其他元素了

ANY:表明当前元素可以包含任意元素

3.1.3如何约束xml属性

<!ATTLIST元素名

属性名1 属性类型属性约束

属性名2 属性类型属性约束

……

>

(1)属性约束

#REQUIRED表明该属性是一个必须存在的属性

#IMPLIED表明该属性是一个可选的属性

#FIXED"固定值" 表明该属性必须取给定的固定值,如果强行设定成其他值dtd校验不通过,如果不给值解析器会默认将加上该属性,并设定为给定的值

"默认值" 如果该该属性没有指定,则取默认值,如果指定成其他则用指定的值

(2)属性类型

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

ENUMERATED枚举,属性的值只能取给定的值中的一个

例子: 类型 (科技|文学|教育) #REQUIRED

ID:表明此属性是一个标志性的属性,在整个xml文档中该属性的值不能重复出现。注意:ID的值不能以数字开头,不能出现空白字符

例子:书号 ID #REQUIRED

3.1.4ENTITY(实体)

实体:就是对一段内容的引用

实体分为引用实体和参数实体

(1)引用实体:这段引用是被用在xml文件中的

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

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

例子:<!ENTITY网址"www.itheima.cn">

<书 类型="科技" 书号="a111" 网址="&网址;">

(2)参数实体 用在DTD中的实体

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

引用参数实体:%实体名称;

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics