XML基础知识

来源:互联网 发布:js concat 编辑:程序博客网 时间:2024/06/05 14:28

XML由来


Extensible Markup Language,翻译可扩展标记语言。XML技术是w3c组织发布的,目前遵循的是w3c组织于2000发布的XML1.0规范。

生活中大量存在有关系的数据,如下图所示:
这里写图片描述

XML语言出现的根本目的在于描述上图那种,在现实生活中经常出现的有关系的数据。

在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。例如:
这里写图片描述


XML常见应用


XML技术除用于保存有关系的数据之外,它还经常用作软件配置文件,以描述程序模板之间的关系。

在一个软件系统中,为提高系统的灵活性,它所启动的模块通常由其配置文件决定
*例如一个软件在启动时,它需要启动A、B两个模块,而A、B这两个模块在启动时,又分别需要A1、A2和
B1、B2模块的支持,为了准确描述这种关系,此时使用XML文件最为合适不过。

<soft>    <a>        <a1></a1>        <a2></a2>    </a>    <b>        <b1></b1>        <b2></b2>    </b></soft>

XML语法


一个XML文件分为如下几部分内容
*文档声明
*元素
*属性
*注释
*CDATA区,特殊字符
*处理指令(processing instruction)

XML语法之文档声明

在编写XML文档时,需要先使用文档声明,声明XML文档的类型。
1. 最简单的声明语法:

<!--最简单的声明语法--><?xml version="1.0" ?><soft>    <a>        <a1></a1>        <a2></a2>    </a>    <b>        <b1></b1>        <b2></b2>    </b></soft>

2.用encoding属性说明文档的字符编码:
1}如果没有用encoding说明的话,则IE浏览器会无法解析(Windows 10系统)

<?xml version="1.0" ?><soft>    <a>        <a1>中国</a1>        <a2></a2>    </a>    <b>        <b1></b1>        <b2></b2>    </b></soft>

2)反之(Windows 10系统),如下图显示

<?xml version="1.0" encoding="GB2312" ?><soft>    <a>        <a1>中国</a1>        <a2></a2>    </a>    <b>        <b1></b1>        <b2></b2>    </b></soft>

这里写图片描述
注意:如果为了统一使用编码方式的话,请将*.xml文件打开(工具:文本、editplus等),然后另存为,将编码方式更改为UTF-8即可,IE浏览器不会出现无法解析。如果是用eclipse等工具,则会自动切换编码方式(GB2312、UTF-8等)
3.用standalone属性说明文档是否独立(可能会与其他文档关联使用):

<?xml version="1.0" encoding="GB2312" standalone="yes" ?><soft>    <a>        <a1>中国</a1>        <a2></a2>    </a>    <b>        <b1></b1>        <b2></b2>    </b></soft>
<?xml version="1.0" encoding="GB2312" standalone="no" ?><soft>    <a>        <a1>中国</a1>        <a2></a2>    </a>    <b>        <b1></b1>        <b2></b2>    </b></soft>

提问:此处在IE浏览器中不论是否独立,都可以打开,IE浏览器并不识别standalone这个属性,如有知道原由的网友,请告知普及一下,谢谢

XML语法之元素

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

<a>www.baidu.com</a>

b.不含标签体

<a></a>

或简写成空标签

<a/>

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

<a>welcome to<b>www.baidu.com</a></b>

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

*对于XML标签中出现的所有空格和换行,XML解析程序都会当做标签内容进行处理。例如:以下两段内容的意义是不同的

<网址>www.baidu.com</网址>
<网址>    www.baidu.com</网址>

*由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯要做改变了。

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

  1. 区分大小写,例如:
<P><p>是两个不同的标记;
  1. 不能以数字或”_”(下划线)开头;
  2. 不能以xml(XML、Xml)开头;
  3. 不能包含空格;
  4. 名称中间不能包含冒号(:);

XML语法之属性

*一个标签可以有多个属性,每个属性都有它自己的名称取值,例如:

<input name="text">

*属性值一定要用双引号(” “)或单引号(’ ‘)引起来
*定义属性必须遵循与标签相同的命名规范
*在XML技术中,标签属性所代表的信息,也可以被改成用子元素的形式来描述,例如:

<input>    <name>text</name></input>

XML语法之注释

*xml文件中的注释采用:”“格式。
*注意:
XML声明之前不能有注释

<!--在XML声明之前写注释是错误的--><?xml version="1.0" encoding="GB2312" standalone="no" ?><soft>    <a>        <a1>中国</a1>        <a2></a2>    </a>    <b>        <b1></b1>        <b2></b2>    </b></soft>

注释不能嵌套,例如:

<!--    <!--局部注释-->-->

XML语法之CDATA区

*在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理;
*如果遇到此情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出;
*这是给计算机阅读的方式;
*语法:

<![CDATA[内容]]>
<![CDATA[    <china>        <br/>    </china>]]>

示例:

<?xml version="1.0" encoding="GB2312" standalone="no" ?><soft>    <![CDATA[    <a>        <a1>中国</a1>        <a2></a2>    </a>    ]]>    <b>        <b1></b1>        <b2></b2>    </b></soft>

这里写图片描述

XML语法之转义字符

*对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理;
*这是给人阅读的方式;
这里写图片描述
示例转义字符:

<?xml version="1.0" encoding="GB2312" standalone="no" ?><soft>    <![CDATA[    <a>        <a1>中国</a1>        <a2></a2>    </a>    ]]>    <b>        &lt;b1&gt;&lt;/b1&gt;        <b2></b2>    </b></soft>

结果显示:
这里写图片描述
注意:经过转义字符处理后的效果和CDATA的效果相似,但是对计算机而言却是不同的。

XML语法之处理指令

*处理指令,简称PI(processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容;
*例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容
(此时需要同时新建一个css文件);

<?xml-stypesheet type="text/css" href="one.css" ?>

*处理指令必须以

<?作为开头,以?>作为结尾

XML声明语句就是最常见的一种处理指令;

实例:config.xml文件

<?xml version="1.0" encoding="GB2312" standalone="no" ?><?xml-stylesheet type="text/css" href="config.css" ?><soft>    <a>        <a1 id="a1">中国</a1>        <a2 id="a2">美国</a2>    </a>    <b>        <b1 id="b1">日本</b1>        <b2 id="b2">英国</b2>    </b></soft>

config.css文件

#a1{    font-size:300px;    color:red;}#a2{    font-size:100px;    color:green;}#b1{    font-size:20px;}#b2{    font-size:200px;    color:blue;}

显示效果:
这里写图片描述
提问:为什么我在Windows10下,xml和css文件相结合,用IE解析,并没有显示出css的效果?
答:有些浏览器并不会解析出css的效果。但尝试了下,Microsoft Edge浏览器是可以的


XML约束概述


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

*常用的约束技术
XML DTD
XML Schema


DTD约束入门

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


实例:book.dtd文档
DTD约束在单独的文件编写

<!ELEMENT 书架 (书+)>        <!ELEMENT 书 (书名,作者,售价)>        <!ELEMENT 书名 (#PCDATA)>        <!ELEMENT 作者 (#PCDATA)>        <!ELEMENT 售价 (#PCDATA)>

实例:book.xml文档

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE 书架 SYSTEM "book.dtd"><书架>    <>        <书名>Java in Thinking</书名>        <作者>张笑笑</作者>        <售价>39.00元</售价>    </>    <>        <书名>JavaScript网页开发</书名>        <作者>张笑笑</作者>        <售价>50.00元</售价>    </>    <老师></老师>    <学生></学生></书架>

经过book.dtd文档的约束,book.xml文档的元素会被限制。但在浏览器解析时照样会输出约束之外的元素。在编程工具idea或eclipse中会提示有错误。

在浏览器中的显示效果:
这里写图片描述

在idea中显示的效果:
这里写图片描述

编写DTD约束的两种方式

*DTD约束即可以作为一个单独的文件编写(在上述已经提及),也可以在XML文件内编写;

单独的book.dtd文档,与在XML文件内编写进行比对

<!ELEMENT 书架 (书+)>        <!ELEMENT 书 (书名,作者,售价)>        <!ELEMENT 书名 (#PCDATA)>        <!ELEMENT 作者 (#PCDATA)>        <!ELEMENT 售价 (#PCDATA)>

在XML文件内编写,如下显示:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><!DOCTYPE 书架 [        <!ELEMENT 书架 (书+)>        <!ELEMENT 书 (书名,作者,售价)>        <!ELEMENT 书名 (#PCDATA)>        <!ELEMENT 作者 (#PCDATA)>        <!ELEMENT 售价 (#PCDATA)>        ]><书架>    <>        <书名>Java in Thinking</书名>        <作者>张笑笑</作者>        <售价>39.00元</售价>    </>    <>        <书名>JavaScript网页开发</书名>        <作者>张笑笑</作者>        <售价>50.00元</售价>    </></书架>

引用DTD约束

*XML文件使用DOCTYPE声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式:
1.当引用的文件在本地时(即:.dtd文件和.xml文件分开编写),采用如下形式:

<!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">例如:<!DOCTYPE 书架 SYSTEM "book.dtd">

2.当引用的文件是一个公共的文件时,采用如下形式:

<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">例如:<!DOCTYPE web-app PUBLIC "-//Sun Microsystem.Inc//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

DTD约束语法细节


*元素定义
*属性定义
*实体定义

DTD语法细节之元素定义1

*在DTD文档中使用ELEMENT声明一个XML元素,语法格式如下所示:
*这里的XML元素相当于指的标签;

<!ELEMENT 元素名称 元素类型或元素内容>

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

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

*当为:元素类型
2.如为元素类型,则直接书写,DTD规范定义了如下几种类型:
a、EMPTY:用于定义空元素;
b、ANY:表示元素内容为任意类型;

例如,当为ANY

<!ELEMENT 书架 ANY>        <!ELEMENT 书 (书名,作者,售价)>        <!ELEMENT 书名 (#PCDATA)>        <!ELEMENT 作者 (#PCDATA)>        <!ELEMENT 售价 (#PCDATA)>

则在xml文件可以添加任意类型的元素,不只限制在书标签,有可能是老师、学生等其他标签;

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE 书架 SYSTEM "book.dtd"><书架>    <>        <书名>Java in Thinking</书名>        <作者>张笑笑</作者>        <售价>39.00元</售价>    </>    <>        <书名>JavaScript网页开发</书名>        <作者>张笑笑</作者>        <售价>50.00元</售价>    </>    <老师></老师>    <学生></学生></书架>

DTD语法细节之元素定义2

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

  • 用逗号分隔,表示内容的出现顺序必须与声明时一致;
<!ELEMENT MYFILE (TITLE,AUTHOR,EMAIL)
  • 用|分隔,表示任选其一,即多个只能出现一个;
<!ELEMENT MYFILE (TITLE|AUTHOR|EMAIL)>

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

符号 次数 示例 + 一次或多次 (书+) ? 0次或一次 (书?) * 0次或多次 (书*) 空白 至少一次 (书)

3.也可使用圆括号()批量设置,例:

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

DTD语法细节之属性定义

  • xml文档中的标签属性需通过ATTLIST为其设置属性
  • 语法格式:
<!ATTLIST 元素名(或称为标签名)    属性名1 属性值类型 设置说明    属性名1 属性值类型 设置说明    ......>
  • 属性声明举例:
<!ATTLIST 商品    类别 CDATA #REQUIRED    颜色 CDATA #IMPLIED>
  • 对应XML文件:
<商品 类别="服装" 颜色="黄色">...</商品><商品 类别="服装">...</商品>

属性定义的详解

  • 设置说明:

    1. #REQUIRED:必须设置该属性
    2. #IMPLIED:可以设置也可以不设置
    3. #FIXED:说明该属性的取值固定为一个值,在XML文件中不能为该属性设置其它值,但需要为该属性提供这个值。
    4. 直接使用默认值:在XML中可以设置该值也可以不设置该属性值。若没设置则使用默认值。
  • 举例

<!ATTLIST 页面作者    姓名 CDATA #IMPLIED    年龄 CDATA #IMPLIED    联系信息 CDATA #REQUIRED    网站职务 CDATA #FIXED "页面作者"    个人爱好 CDATA "上网">

对应的XML文件:

<页面作者 联系信息="888888">...</页面作者>

该XML文件中,有三个属性,其中网站职务和个人爱好隐藏了没有显示说明


常用属性值类型


  • CDATA:表示属性值为普通文本字符串
  • ENUMERATED:枚举
  • ID
  • ENTITY(实体)

属性值类型-ENUMERATED

  • 属性的类型可以是一组取值的列表,在XML文件中设置的属性值只是这个列表中的某个值(枚举)
<?xml version="1.0" encoding="GB2312" standalone="yes"?><!DOCTYPE 购物篮 [    <!ELEMENT 肉 EMPRY>    <!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">]><购物篮>    < 品种="鱼肉"/>    < 品种="牛肉"/>    </></购物篮>

属性值类型-ID

  • 表示属性的设置值为一个唯一值;
  • ID属性的值只能由字母,下划线开始,不能出现空白字符
<?xml version="1.0" encoding="GB2312"?><!DOCTYPE 联系人列表 [    <!ELEMENT 联系人列表 ANY>    <!ELEMENT 联系人(姓名,EMAIL)>    <!ELEMENT 姓名(#PCDATA)>    <!ELEMENT EMAIL(#PCDATA)>    <!ATTLIST 联系人 编号 ID #REQUIRED>]><联系人列表>    <联系人 编号="A1">        <姓名>张三</姓名>        <EMAIL>zhang@128.org</EMAIL>    </联系人>    <联系人 编号="A2">        <姓名>李四</姓名>        <EMAIL>李四@128.org</EMAIL>    </联系人></联系人列表>

属性值类型-ENTITY(实体)

  • 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了;
  • 在DTD定义中,一条<!ENTITY...>语句用于定义一个实体;
  • 实体可分为两种类型:引用实体参数实体
  • 引用实体主要在XML文档中被应用;
  • 语法格式:

引用实体

<!ENTITY 实体名称 "实体内容">直接转变成实体内容
  • 引用方式:《&实体名称;》
  • 举例:
<!ENTITY copyright "I am a programmer">......&copyright;
  • 实际中的应用

book.dtd文档

<!ENTITY bookname "javaweb开发"><!ELEMENT 书架 (书+)>        <!ELEMENT 书 (书名,作者,售价)>        <!ELEMENT 书名 (#PCDATA)>        <!ELEMENT 作者 (#PCDATA)>        <!ELEMENT 售价 (#PCDATA)>

book.xml文档

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE 书架 SYSTEM "book.dtd"><书架>    <>        <书名>&bookname;</书名>        <作者>张笑笑</作者>        <售价>39.00元</售价>    </>    <>        <书名>JavaScript网页开发</书名>        <作者>张笑笑</作者>        <售价>50.00元</售价>    </></书架>

参数实体

  • 参数实体被DTD文件自身使用
  • 语法格式:
<!ENTITY % 实体名称 "实体内容">
  • 引用方式:《%实体名称;》
  • 举例1:
<!ENTITY % TAG_NAMES "姓名|EMAIL|电话|地址"><!ELEMENT 个人信息 (%TAG_NAMES;|生日)><!ELEMENT 客户信息 (%TAG_NAMES;|公司名)>
  • 举例2:
<!ENTITY % common.attributes        "id ID #IMPLIED            account CDATA #REQUIRED">...<!ATTLIST purchaseOrder %common.attributes;><!ATTLIST item %common.attributes;>
原创粉丝点击