XML详解

XML详解

一、XML概述

0x1 XML的基本概念

  • XML(Extensible Markup Language,可扩展标记语言)
  • 允许开发者自由定义标签,可以将标签和内容有效分离
  • XML不再侧重于数据如何展示,而是更多地关注数据如何存储和传输

0x2 XML的应用场景

  • XML把数据从HTML分离出来
  • 简化数据共享
  • 简化数据的传输
  • 简化平台的变更

0x3 XML的优势

  • 简单易用的标记语言
  • 严格的格式
  • 数据逻辑和显示逻辑分离

二、XML文档规则

0x1 XML整体结构

  • 有且只有一个根元素
  • 元素必须合理结束
  • 元素之间必须合理嵌套
  • 元素的属性必须有值

0x2 XML声明

<?xml version=“1.0” encoding=“GB2312” standalone=“yes”?>

0x3 字符集

  1. 简体中文:GBK或GB2312
  2. 繁体中文:BIG5
  3. 西欧字符:ISO8859-1
  4. 通用的国际编码:Unicode
  5. 针对Unicode的可变长度字符编码:UTF8

0x4 XML文档规则

合法标签名
XML文档对于标签名有如下要求:

  • 标签名可以字母(包括非西欧字符)、数字、下画线(__)、中画线(—)、冒号 (:)和点号(.)组成,但不能以数字、中画线和点号开头
  • 标签名不能包括<、>、,、$等符号
  • 标签名中尽量不要出现英文冒号“:”,除非是在使用名字空间
  • 标签名不能以字符“xml”( 或者 XML、Xml等任意大小写组合开始)
  • 标签名不能包含空格

嵌套子元素

  • XML允许无限深度嵌套子元素,只要保证元素之间合理嵌套即可
  • XML元素可以嵌套多个重名的子元素,这多个元素之间是有序的

空元素

  • XML允许使用空元素语法,空元素不可接受子元素,也不可接受字符串内容
  • 空元素和内容为空的元素并不相同
  • 空元素只是不能包含子元素,也不能包含字符串内容,但完全可以接受属性,
    而且可以接受任意多个属性

字符数据
开始标签和结束标签之间的文本可以是任何Unicode字符,并且其间的任何字符都将忠实地传递给XML处理程序。
如果文本字符串中包含一些特殊的字符,例如尖括号(<)或and符号(&),由于这些符号在XML文档中都有特殊的含义,因此直接在XML元素中使用该字符串将引起文档混乱

1、使用实体引用
为了正确处理XML文档中的特殊字符,XML允许使用实体来表示这些特殊字符。
XML预置了5个实体引用,如表:

实体引用所工表符号说明
&lt;<小于符号
&gt;>大于符号
&amp;&and符号
&apos;英文单引号
&quot;英文双引号

2、使用CDATA标记
在特殊标记CDATA下,所有的特殊字符,甚至是有效的元素都将被当成简单字符处理实体引用也会失去作用,变成纯文本。语法:

<![CDATA[文本内容]]>

注释
XML文档还可加入解释用的字符数据,这些解释用的字符串不会被XML解 析器处理.这些解释用的文本称为注释。语法:

<!--注释字符串-->

注意:

  1. 不要把注释放在标签之内,否则,该文档将不是一个格式良好的XML文档
  2. 不要把注释放在XML声明之前,XML声明应该永远处于XML文档的第一行
  3. 不要在注释中使用双中画线(–)

W3C对于属性的使用建议
属性通常提供属于数据组成部分的信息,如果属性值里包含的信息属于该 实体本身,则应该使用子元素来指定该信息,因此,W3C推荐尽量使用子元素, 而避免使用属性

XML文档分类
1、格式不良好的XML文档

  • 完全没有遵守XML文档基本规则的XML文档

2、格式良好但无效的XML文档

  • 遵守了XML文档基本规则,但没有使用DTD或Schema定义语义约束的 XML文档

  • 使用DTD或Schema定义了语义约束,但没有遵守DTD或Schema所定义 的语义约束的XML文档

3、有效的XML文档

  • 遵守了XML文档基本规则,并使用DTD或Schema定义了语义约束,而且 也完全遵守了DTD或Schema所定义的语义约束的XML文档

XML命名空间
在同一份XML文档中可能出现素和属性具有不同的含义和作用,但如果我们不从语法上提供区别,则XML处理器无法区分它们

语法:

xmlns[:prefix]=“命名空间字符串”

命名空间的特征:

  • 名字很长 (命名空间往往是一个绝对的URL地址)
  • 名字里往往包含英文冒号、斜线等特殊字符

属性使用命名空间

  • 通常情况下,由于属性是属于某个元素的,因此很自然地认为属性总是属 于它所在元素所处的命名空间,一般无须专门为属性指定命名空间

三、XPath语言

0x1 XPath概念

XPath语言是一门专门用于在XML文档中查找信息的语言,其他XML程序 可利用XPath在XML文档中对元素和属性进行导航

0x2 XPath节点

节点类型说明
XML文档根节点XML文档的根称为文档节点或根节点
元素节点一个元素的开始标签、结束标签,以及开始标签和结束标签之间的全部 内容整体称为元素节点
属性节点元素的每个属性都是属性节点。属性节点包括属性名和属性值两个部分。 XPath认为属性节点必须依附于元素节点
XML节点XML文档里<!–和-->包含的部分就是注释,注释对应的就是注释节点
命名空间节点命名空间节点代表XML文档中的xmlns:prefix属性
文本节点即XML元素中间的字符数据,包括CDATA段中的字符数据

0x3 XPath基本概念

基本值(或称原子值)

  • 基本值专门用于表示简单的数据值,例如整数值、字符串等。我们可以基本值当成没有 父节点且没有子节点的节点

  • 项是XPath2.0提出的一个术语,一个项代表一个节点或基本值

节点集和序列

  • 在某些情况下,XPath表达式可以表示多个节点,多个节点组合在一起在XPath1.0里称 为节点集

  • XPath2.0提出一个序列的概念,XPath2.0的序列可以代表一个普通的项,也可以代表节点集

相对路径和绝对路径
XPath同样支持相对路径和绝对路径。对于XPath而言,绝对路径以斜线(/)开头,而相 对路径则不会以斜线(/)开的
例如:
/list/book/name:该路径总是匹配list元素内的book元素之内的name子元素
list/book/name:该路径到底匹配哪个或哪些节点是不确定的

0x4 XPath基础语法

XPath使用路径表达式来定位XML文档中的节点或节点集,每个Xpath表达式总由多个 步(step)组成,多个步之间用斜线分隔

例如:
/list/book/name

XPath中步的完整语法格式如下:
轴::节点测试[限定谓语]


XPath的步使用轴来定义所选节点与当前节点之间的结构关系

节点测试
节点测试用于从指定轴所匹配的节点集中选出特定的节点

限定谓语
限定谓语是一个boolean表达式,或者可以转换为boolean值的表达式, 用于进一步提炼所选的节点集。限定谓语应该放在括号中
语法:

child::book[1]或child::book[position()=1]

简化写法
省略child轴,例如:website/muke等同于child::website/child::muke

使用@符号代替attribute轴,例如:book[@isbn=“123456”]等同于 child::book[attribute::isbn=“123456”]

使用//代表后代表节点,例如://book等同于/descendant-orself::node()/child::book

使用一个点代表当前节点 ,例如:./book等同于self::node()/child::book

使用两个点代表上一级节点,例如:…/book等同于parent::node()/child::book

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值