XML 初识

  XML的全称是Extensible Markup Language,意思是可扩展展标记语言。XML要实际应用中有两个主要的功能,一是用来保存数据的,二是用来作配置文挡使用。在XML语言中,允许用户自定义标签,一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其他标签描述数据。

  XML常见应用

  一个XML文件包含如下几部份

  •   文挡声明
  •   元素
  •   属性
  •   注释
  •   CDATA区、特殊字符
  •   处理指令

  1.文挡声明
  最简单的声明语法:<?xml version=”1.0” ?>。用Encoding属性说明文挡的字符编码: <?xml version=”1.0” encoding=”GB2312” ?>。用standalone属性说明文挡是否独立 <?xml version encoding=”GB2312” standalone=”yes” ?>,虽然标注了该XML是独立的,但在IE游览器并没有严格按照XML规格去办事。不管有没有标注,IE都认为文挡是非独立的。

     注:另外你保存的时候,encoding是什么,文本另存为的时候就得是什么。

  2.元素

  • XML元素指XML文件中出现的标签,一个标签分为开始标签和结束标签。
  • 一个标签可以嵌套若干子标签。但所有标签必须合理的嵌套,绝对不允许交叉嵌套。
  • 有且仅有一个根标签,其它标签都是这个根标签的子孙标签。

  对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的。
  第一段:<URL>www.hstc.cn</URL>
  第二段
  <URL>
    www.hstc.cn
  </URL>

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

  • 区分大小写
  • 不能以数字或_开头
  • 不能含空格
  • 名称中间不能包含冒号(:)

  3.属性

       一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如:<input name=”text”>。 属性值一定要用双引号(“)或单引号(’)引起来。定义属性必须遵循与标签相同的命名规范。另外,标签属性所代表的信息,也可以被改成用子元素的形式来描述

  例如:
   <input>
    <name>text</name>
  </input>

  4.CDATA区
  术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。在XML 元素中,"<" 和 "&" 是非法的。"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
  某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。CDATA 部分中的所有内容都会被解析器忽略。CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:

       <![CDATA[

              <URL>www.hstc.cn</URL>

       ]]>

  5.处理指令
  处理指令,简称PI(PROCESSING INSTRUCTION)。处理指令用来指挥解析引擎如何解析XML文挡内容。例如在XML文挡中可以使用XML-stylesheet指令,通知XML解析引擎,应用CSS文件显示XML文挡内容。

       <?xml-stylesheet type=”text/css” href=”1.css” ?>

  处理批令必须以 <?  作为开头,以 ?> 作为结尾,XML声明语句就是最常见的一种处理指令。

  例如下面这个例子:

View Code
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="test.css"?>
<网站>
    <站点>
        <name>新浪网</name>
        <URL>http://www.sina.com.cn</URL>
    </站点>
    <站点>
        <name>腾讯网</name>
        <URL>http://www.qq.com</URL>
    </站点>
    <站点>
        <name>百度网</name>
        <URL>http://www.baidu.com</URL>
    </站点>
</网站>

/*test.css文件*/
@CHARSET "UTF-8";
name{ font-size:16px;color:blue;}
URL{ font-size:14px; color:red;}

  显示结果如下:

==========================================================

 XML约束

  什么是XML约束:在XML技术里,可以编写一个文挡来约束一个XML文挡的书写规范,这称之为XML约束。常见的约束技术有:XML DTD和XML Schema
  DTD是全称Document Type Definition 全称是文挡类型定义

  DTD的两种校验方式,第一种使用外部引用

  新建一个BOOK.DTD文件

  <!ELEMENT 我的书 (书+)>
  <!ELEMENT 书 (书名,作者,价格)>
  <!ELEMENT 书名 (#PCDATA)>
  <!ELEMENT 作者 (#PCDATA)>
  <!ELEMENT 价格 (#PCDATA)>

  在BOOK.XML引入BOOK.DTD文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 我的书 SYSTEM "book.dtd">
<我的书>
    <>
        <书名></书名>
        <作者></作者>
        <价格></价格>
    </>
</我的书>

  第二种方式 在XML文件中内部嵌入DTD

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

<!DOCTYPE 我的书[
    <!ELEMENT 我的书 (书+)>
    <!ELEMENT 书 (书名,作者,价格)>
    <!ELEMENT 书名 (#PCDATA)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ELEMENT 价格 (#PCDATA)>
]>


<我的书>
    <>
        <书名></书名>
        <作者></作者>
        <价格></价格>
    </>

    <>
        <书名></书名>
        <作者></作者>
        <价格></价格>

    </>
</我的书>

  DTD的语法细节
  
用 | 分隔,任选其一。
  用+ * ? 等符号表示
  +:一次或多次
  ?:0次或一次
  *:0次或多次
  结果圆括号表示批量设置,例如(TITLE | AUTHOR)*

  属性定义

  Xml文挡中标签属性需引过ATTLIST为其设置属性。
  语法格式如下:

       <!ATTLIST 元素名
    属性名1 属性值类型  设置说明
    属性名2 属性值类型  设置说明
    …
   >

   属性声明举例
  <!ATTLIST 商品
    类别 CDATA #REQUIRED
    颜色 CDATA #IMPLIED
  >

   设置说明:
  #REQUIRED 必须设置该属性
  #IMPLIED 可以设置也可以不设置
  #FIXED 说明该属性的取值固定为一个值,在XML文件中不能为该属性设置其他值

  举例

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

<!DOCTYPE 我的书[
    <!ELEMENT 我的书 (书+)>
    <!ELEMENT 书 (书名,作者,价格)>
    <!ELEMENT 书名 (#PCDATA)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ELEMENT 价格 (#PCDATA)>
    
    <!ATTLIST 我的书
        日期 CDATA #IMPLIED
        电话 CDATA #REQUIRED
    >
]>


<我的书 电话="89891231">
    <>
        <书名></书名>
        <作者></作者>
        <价格></价格>
    </>

    <>
        <书名></书名>
        <作者></作者>
        <价格></价格>

    </>
</我的书>

  

  常见的属性值类型

       <!ATTLIST 元素名
    属性名1 属性值类型  设置说明

    …
   >

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

  2.枚举

  3.ID值

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

<!DOCTYPE 我的书[
    <!ELEMENT 我的书 (书+)>
    <!ELEMENT 书 (书名,作者,价格)>
    <!ELEMENT 书名 (#PCDATA)>
    <!ELEMENT 作者 (#PCDATA)>
    <!ELEMENT 价格 (#PCDATA)>
    
    <!ATTLIST 书
        编号 ID #REQUIRED
    >
]>


<我的书>
    <书 编号="1">
        <书名></书名>
        <作者></作者>
        <价格></价格>
    </>

    <书 编号="2">
        <书名></书名>
        <作者></作者>
        <价格></价格>

    </>
</我的书>

  4.实体

  实体ENTITY用于为一段内容创建一个别名,以后在XML文挡中就可以使用别名引用这段内容了。
  语法格式:<!ENTITY 实体名称 “实体内容” > 直接转变成实体内容
  引用方式:&实体名称
  举例

    <!ENTITY copyright “I am a programmer”>
    …
    &copyright

  

  看来这里我对HTML的&nbps;有了认识,他也是实体引用。 

=================================================================

  DTD中文参加手册:http://wenku.baidu.com/view/9b38a1c38bd63186bdebbc01.html

原文地址:https://www.cnblogs.com/cxeye/p/2719538.html