XML 语法笔记
XML 光速入门!教程来自 W3school。
什么是 XML?
- 可扩展标记语言(EXtensible Markup Language)
- 用于数据传输
- 自行定义标签
- 方便程序读取
- 组成成分:元素、属性和文本
- RFC 4825
TL;DR
下面这张图是网站“Linux中国”的 RSS 片段,很有代表性,我把各个字段的含义都标出来了,基本上包括了 XML 的所有语法。
元素
元素(Element)是指从开始标签到结束标签的部分,包括标签本身和标签包括的内容。
一个元素里面可以有:
- 属性
- 子元素
- 文本
子元素还能继续包含其他元素,所以是一个树形结构。
注意:XML 没有预定义的标签,这和 HTML 不同,HTML
中的 <p>
、<h1>
标签都是预定义的。XML 所有的标签和属性都是创作者自定义的。
例子
1 | <bookstore> |
语法规则
所有的元素必须关闭标签
对大小写敏感
标签必须正确的嵌套
文档必须有根元素
特殊意义的字符使用实体引用(Entity References)
实体引用以
&
开头,以;
结尾,比如<
字符用<
替换。注释:
<!-- 注释内容 -->
XML 中空格会被保留,而 HTML 会把多个空格合并成一个
属性
属性(Attribute)提供关于元素的额外(附加)信息。
- 附加的存在
- 属性值双引号
- 难以维护
属性通常提供不属于数据组成部分的信息,但这些信息对于处理这个元素的软件来说很重要。
1 | <file type="gif">computer.gif</file> |
包含双引号的属性值用单引号包围:
1 | <gangster name='George "Shotgun" Ziegler'> |
或者可以使用实体引用:
1 | <gangster name="George "Shotgun" Ziegler"> |
元素还是属性?
1 | <person sex="female"> |
这两个例子传递的信息都是相同的,只是 sex 一个是作为属性存在,一个是作为字段存在。什么时候用属性,什么时候用字段是没有规定的。教程里面建议,如果信息看起来很像数据,就使用子元素。
元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。
命名空间
命名空间可以避免元素名冲突。
使用前缀可以避命名冲突。前缀是在标签名的前面加上前缀名称,用冒号隔开:
1 | <h:table> |
而命名空间对标签进行限定,声明某个前缀属于一个特定的命名空间,采用的方法是添加一个 xmlns 属性:
1 | xmlns:namespace-prefix="namespaceURI" |
1 | <h:table xmlns:h="http://www.w3.org/TR/html4/"> |
命名空间地址的作用是唯一性,不会被解析,通常是对应的开发者的网站。
用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息。
如果省略了前缀名字,则表示所有子元素都属于这个命名空间。
1 | xmlns="namespaceURI" |
1 | <table xmlns="http://www.w3.org/TR/html4/"> |
CDATA
XML 解析器不会解析 CDATA 部分内的文本,常用来保存大段原始数据。
CDATA 部分以 <![CDATA[
开始,以 ]]>
结束:
1 | <![CDATA[不会被解析的内容]]> |
CDATA 部分不能包含字符串 ]]>
。也不允许嵌套的 CDATA
部分。
标记 CDATA 部分结尾的 ]]>
不能包含空格或折行。
XML 相关技术
名称 | 描述 |
---|---|
XML HttpRequest | 用于在网页服务器之间传递数据,比如 AJAX |
XML Parser | 解析器,用来将 XML 文本解析成 DOM 对象 |
XML DOM | 定义了操作 XML 文档的规范,把 XML 展示为树形结构 |
XML XPath | XPath 表达式使用类似文件路径的语句来选取 XML 中的节点 |
XML CSS | 用 CSS 样式表来格式化 XML 文档 |
XML XSLT | 同样是用来格式化 XML 的,比 CSS 复杂,功能更多 |
XML XQuery | XML 的查询语言,如同 SQL 之于数据库 |
XML XLink | XML 里的超链接 |
XML DTD | 规范化,用来定义 XML 文档元素和属性的结构 |
XML Schema | 描述 XML 文档结构,自己也是 XML 语法,功能和 DTD 一样 |
参考资料: