导航

进入黑马day1-XML简单学习

Posted on 2013-02-25 19:59  酷鱼影子  阅读(131)  评论(0编辑  收藏  举报

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 % 实体名称 "实体内容" >

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