XML基础
XML概述
可扩展的标记语言(eXtensible Markup Language),简称XML,是一种标记语言。
现实生活中存在着大量的数据,在这些数据之间往往存在一定的关系,我们希望能在计算机保存和处理这些数据的同时能够保存和处理他们的关系。
XML就是为了解决这样的需求而产生的数据存储格式。
存储的格式大致如下:
<?xml version="1.0"?> <小纸条> <收件人>大元</收件人> <發件人>小張</發件人> <主題>問候</主題> <具體內容>早啊,飯吃了沒? </具體內容> </小纸条>
在XML语言中,它允许用户自定义标签,每一个标签用于描述一段数据;
一个标签分为开始标签、结束标签与标签体,标签体中又可以嵌套其他标签,以此来表示数据的层级关系;
XML本质上是一段字符串,具有跨平台性,因此XML常被用于在不同系统之间进行数据交换。
XML文件
XML是一种数据存储格式,我们可以遵照这种格式写出XML数据并保存到一个后缀为.xml的文件中
XML文件是保存XML数据的一种方式,XML数据也可以以其他的方式存在,如在内存中构建XML数据,所以XML语言并不只是狭隘的XML文件。
XML校验方法
Eclipse自带有XML文件的语法校验
浏览器中也自带有XML文件的校验引擎
亦可用用JS代码校验
1: 创建xml文档解析器对象
2: var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
3: 开启xml校验
4: xmldoc.validateOnParse = "true";
5: 装载xml文档
6: xmldoc.load("book.xml");
7: 获取错误信息
8: xmldoc.parseError.reason;
9: xmldoc.parseError.line
XML语法
文档声明
用来声明XML的基本属性,用来指挥解析引擎如何去解析当前XML
通常一个XML都要包含并且只能包含一个文档声明
XML的文档必须在整个XML的最前面,在文档声明之前不能有任何内容
<?xml version=”1.0”?>
version是必须存在的属性,表明当前xml所遵循规范的版本,目前最新为1.0
<?xml version=”1.0” encoding=”utf-8” standalone=”yes”?>
encoding用来指定XML文档的字符集编码,encoding指定的编码表应与文档实际保存的编码相同,否则会出现乱码问题。
standalone用来指明当前XML文档是否是一个独立的XML,默认为yes,如果当前文档依赖其他文档而存在则需要将此值置为no
元素
一个XML标签就是一个元素
一个标签分为开始标签、结束标签和标签体
如果标签的开始标签和结束标签中没有标签体,可以将开始标签和结束标签合并,这样的标签就叫做自闭标签
如:<a></a>可以直接写成 <a/>
一个标签中也可以包含任意多个子标签,但是嵌套关系一定要清晰
例如<a>dsfds<b>sdf</a></b>即为错误的嵌套关系
一个格式良好的XML要包含并且只能包含一个根标签,其他的标签都应该是这个根标签的子孙标签
区分大小写,例如,<P>和<p>是两个不同的标签
不能以数字或标点符号或""开头
不能以XML(或xml、Xml等)开头
不能包含空格
名称中间不能包含冒号(:)
属性
一个标签可以有多个属性,每个属性都有它自己的名称和取值
例如:<Person name=”Shawn” age=”24”/>
属性的名在定义时要遵循和XML元素相同的命名规则
属性的值需要用单引号或双引号括起来,如果属性值中有"则需要换成'
注释
<!--注释内容—>
注释可以出现在XML文档中的任意位置,除了整个文档的最前面,也就是必须保证文档声明是文档的第一行
注释不能嵌套注释
CDATA区与转义字符
<![CDATA[转义的内容]]>
当XML中一段内容不希望被解析器解析时可以把它放在CDATA区中
例如你想呈现一段XML文档的语法<?xml version=”1.0”?>
可以把它放在CDATA区中<![CDATA[<?xml version=”1.0”?>]]>
转义字符
有些较短的特殊字符可以直接用转义字符表示
& ---> &< ---> <> ---> >" ---> "' ---> '
处理指令
简称PI(Processing Instruction).
处理指令用来指挥解析引擎如何解析XML文档内容
<?xml-stylesheet type=”text/css” href=”1.css”?>
声明就是一个处理指令
XML约束
在XML技术里,可以编写一个文档来约束XML文档的写法,我们称之为XML约束
这样可以:
规范不同应用的XML文档的写法对XML进行校验
常见的XML约束技术有
- XML DTD
- XML Schema
DTD技术
DTD(Document Type Definition),文档类型定义,用来约束XML文档的写法
DTD文件是以.dtd结尾的文件
在XML中引入DTD约束的方法有两种:
外部引入:
本地文件引入:该DTD文件在本地硬盘中
<!DOCTYPE 根元素名称 SYSTEM "文件所在的路径">
公共位置文件引入:
<!DOCTYPE 根元素名称 PUBLIC "dtd名称" "dtd文件所在URL">
内部引入:在XML内部直接写DTD约束
在文档声明下直接写如下指令
<!DOCTYPE 根元素名称 [dtd约束的内容]>
DTD语法
约束XML元素
<!ELEMENT 元素名称 元素约束>
元素约束的内容可以写以下范围内格式:
存放类型:
ANY:当前声明的元素可以包含任何声明的子元素
EMPTY:当前声明的元素不能包含任何元素
存放内容:
<!ELEMENT "元素名" (可以包含的元素的名称)>
小括号中的内容可以有多个元素的名称
如果用","分割这些元素表明这些元素必须依照顺序出现
如果用"|"分割这些元素表明只能出现这些元素中的一个
"+"表明内容可以出现一次或多次
"*"表明内容可以出现零次或多次
"?"表明内容可以出现零次或一次
#PCDATA表明该元素可以包含标签体
可以利用()进行组操作
例子:<!ELEMENT MYLIFE ((TITLE*,AUTHOR?,EMAIL)*|COMMENT)>
约束XML属性
<!ATTLIST 元素名 属性名 属性类型 属性约束>
属性类型:
CDATA:表明该属性的值是一个普通的文本值
ENUMERATED:表明该属性的值只能取指定范围内的其中之一
ID:表明该属性在整个文档中必须唯一,ID类型的属性值必须以字母或者下划线开头,不能以数字开头,不能包含空格
属性约束:
#REQUIRED:表明当前这个属性是必须存在的属性
#IMPLIED:表明当前这个属性是可选的属性
#FIXED "固定值":表明当前这个属性具有一个固定值,不能指定其他的值
"默认值":表明当前属性具有一个默认值,亦可指定其他值
实体
实体可以理解为对一段内容的引用,如果有一段内容使用频繁且不易书写,可用定义实体的方法
引用实体(用在XML中的实体)
声明实体:<!ENTITY 实体名称 "实体内容">
引用:&实体名称;
参数实体(用在DTD文件中的实体)
声明实体:<!ENTITY % 实体名称 "实体内容">
引用:%实体名称;