XML学习笔记#1:XML语法
XML是一种用于标记电子文件使其具有结构性的标记语言。这是一篇XML的笔记。
概述
XML(eXtensible Markup Language)是标记语言中的一种,以一种更中立的方式,让用户自行决定要如何理解、呈现从服务端所提供的信息,而着重表示数据以及数据之间的联系。
其特点为可扩展性、灵活性、自描述性与简洁性。
一个完整的XML文档大体分为三个部分:文档数据(XML)、文档结构(DTD/Schema)与文档样式(XSL/CSS)。其结构为树形结构。
语法
声明
位于XML文档的第一行,结构一般为:
1 |
其基本框架为
1 |
- 版本声明 :version属性的取值用于描述当前XML的版本编号,通常情况下为1.0,这是为了将来的新版本能够保持向后的兼容性而设计的。这个属性必须存在,且必须作为第一个属性。
- 编码声明 :encoding属性的取值用于指明当前XML文档中所使用的符号的编码方式。我们一般选用UTF-8编码。
- 独立声明 :standalone属性的取值表明当前XML文件是独立使用、还是与其他的标记文件配套使用。如果该属性为yes,表示在解析当前XML文档时,无需其他的外部标记声明文件。
注意
encoding的值与XML文档在文件系统中保存时使用的编码方式没有直接的关系
1 | <?target-name data?> |
的语法形式为处理指令 ,用于XML文档的转换,后续会接触到更多处理指令。
注释
注释的基本框架为:
1 | <!-- 注释内容 --> |
由于“- -”为注释中的保留字符,所以在注释内容中不应该出现双横杠
注释一般为独立出现 ,不应出现在其他元素的标记中,同理,注释也不应该嵌套
元素与属性
基本框架
之所以将其放在一起,是因为它们所起的功能是相似的,其基本框架为:
1 | <元素名 属性名1="属性值1" 属性名2="属性值2"> |
元素与属性可谓XML中的核心,起到了存储数据的功能。其基本框架与HTML类似:元素分为起始标记<元素名>与中止标记</元素名>,被这两个标记所包含的即为元素的内容,内容中可以嵌套其他元素。而属性被包含在元素的起始标记当中,基本结构为属性名=“属性值”,用来为元素添加属性。
元素与属性的使用并没有优劣之分,但一般情况下:考虑到文档的可读性,我们会将简单的标量数据设置为属性,其余一律设置为元素。
由于不同属性之间不允许有重复的属性名,但不同元素可以,所以要是有多个相同内容,就必须使用元素。也正因为此,属性之间是无序的,而元素之间是有序的。例如:若一本书有多个作者,用元素表示会显得更为优雅:
1 | <book> |
而用元素表示,则较为杂乱:
1 | <book author1="Lyx" author2="linyx"></book> |
与HTML一样,XML也支持空元素的表示,一般用于只有属性而没有元素内容的元素。如上面这行代码,可以简化成:
1 | <book author1="Lyx" author2="linyx"/> |
元素中的文本
与HTML相同,在元素的文本中无法清晰地解析一些保留字符,如:
1 | <lessthan>1<2</lessthan> |
中的“<”就难以被XML所解析,无法判断到底是字符还是结束标记。所以需要我们用其他字符来代替这些保留字符。XML1.0规范中定义了五种预定义实体:
字符 | 预定义实体 |
---|---|
< | < |
> | > |
& | & |
’ | ' |
" | " |
如上述例子将“<”用“<”替代后就能成功被解析:
1 | <lessthan>1<2</lessthan> |
(这里无法成功被转换成“<”是我博客解析的问题,写入XML是会正常转换的)
当然,如果觉得这些预定义实体符太难记,也可以用暴力点的方法:CDATA段。可以将整段文本放入CDATA段中:
1 | <![CDATA[文本内容]]> |
这样一来其中的字符就不会被保留字符所影响,可以直接解析。但需要注意的是,其中的文本内容也不能包含“]]>”的字符串,否则也是会解析错误。同理,CDATA段不应嵌套。
命名空间
和许多编程语言相同,XML也支持命名空间。其基本声明方式为:xmlns:空间名=“URL” ,声明部分应该作为属性存在于某个元素中。这样听起来可能有些抽象,我们来举个例子:
1 |
|
这里就是从网络上引用了命名空间,并设置其名字为ns,然后应用于该元素极其子元素中。与其他语言一样,命名空间存在其作用域,比如这里的ns就只能在
1 | <ns:company xmlns:ns="http://www.myns.com"></ns:company> |
中被使用,超出了这个作用域就无法使用。
与其他语言相同,命名空间的名字可以被缺省,简化了命名空间的使用,同时对作用域中的所有元素强制应用:
1 |
|