专栏首页后台全栈之路XML 语法速查笔记
原创

XML 语法速查笔记

相比起 Json,XML 是一种相对古老和复杂、但功能更加强大的数据存储/传输格式。也因为其复杂,有一些语法需要记录一下,在使用多种语言进行 XML 操作的时候备查。


范例

下面是一个相对比较完整的 XML 范例:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 上面这一行不属于 XML 组成部分,但是是 XML 文档的一部分 -->
<readme>
   <author>Andrew</author>
   <date>
      2018-10-11
      <year>2018</year>
      <mon>10</mon>
      <mday>11</mday>
   </date>
   <note>这是一个示例性质的 XML 范例。可以看到,一些关键字符比如双引号 &quot; 是需要转义的。</note>
   <main_page id="1307425">
      <href><![CDATA[https://cloud.tencent.com/developer/column/4101]]></href>
      <name>amc</name>
   </main_page>
</readme>

以下内容主要根据上述范例进行说明。


概念和关键词

名词

英文名

说明

XML

XML

可扩展标记语言(EXtensible Markup Language)

XML 文档

Document

上述范例就是一个 XML 文档

元素

Element

一个 <xxx>...</xxx> 对,及其中间的部分加起来,就是一个元素

XML 标签

Tags

范例中的 <xxx></xxx> 文字就是一对标签

根元素

Root

每个 XML 文档需要有且只有一个根元素,这个元素是所有元素的祖先元素

子元素

Children

同胞元素(Siblings):范例中 <date> 元素下的 <year>

文本内容

Text

范例中,<author> 元素中的 Andrew 就是文本内容;同理 <date> 元素下的 2018-10-11 也是文本内容

属性

Attributes

范例中 main_page 元素中有一段文字 id="1307425",这就是元素 main_page 的属性,其属性名为 "id",属性值 为 “1307425”


语法规则速查

  • 所有 XML 元素均需要有关闭标签,比如 <name> 均必须跟着一个 </name> 结尾
  • XML 标签大小写敏感
  • XML 必须正确地嵌套
  • XML 必须有且只有一个根元素
  • 属性值必须加上引号,至于属性名则无需引号。

XML 元素命名规则

强制性的命名规则如下:

  • 元素命名只包含文字(包括非英文的文字)、数字、字符
  • 不能以 “XML” 或其他大写转换后为 “XML” 的字符串开头
  • 不能包含空格

约定俗成(建议)的命名规则,除了上述几条之外,还有:

  • 不要使用减号/连字符 “-”,建议使用下划线 “_
  • 避免使用点 “.” 和冒号 “:
  • 不要使用非 ascii 字符

属性

建议避免使用属性,而是以子元素 + 文本内容的方式来替代。比如:

<date>2018-10-11</date>

建议替换成范例中的:

<date>
   2018-10-11<!--可加可不加,加上可以作为对老代码的兼容-->
   <year>2018</year>
   <mon>10</mon>
   <mday>11</mday>
</date>

“转义”

这里借用了 C/C++ 里格式化字符串的 “转义” 一词,但是实际上 XML 没有这个名词,而是 “实体引用”。XML 中有五个预定义的实体引用,在使用的时候需要 “转义”:

字符名

字符

“转义” 后的字符串

小于号

<

&lt;

大于号

>

&gt;

”and“ 符号

&

&amp;

单引号

'

&apos;

双引号

"

&quot;

其中只有 <& 是确实需要特殊处理的,但是作为规范,上述所有符号实际操作中均应处理。


XML CDATA

XML CDATA 是一个关键字,其包含的内容不会被 XML 解析器解析。CDATA 采用 <![CDATA 开头,用 ]]> 结尾。比如范例中的:

<href><![CDATA[https://cloud.tencent.com/developer/column/4101]]></href>

注意不同语言或库对 CDATA 的解析方式可能会有所不同,比如 Python 解析 CDATA 后会得到一个普通的 text 值,但是 RapidXML 则会得到一个子元素。

CDATA 也有限制,就是正文中不能包含 ]]>,否则会导致解析错误。


XML 命名空间

这个功能目前笔者觉得比较少用,不过还是记录一下。命名空间约定使用冒号进行分分隔。命名空间可以手动指定,如:

<f:table>
   <f:name>African Coffee Table</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
</f:table>

实操中,推荐加上命名空间属性 xmlns,如:

<f:table xmlns:f="http://www.w3school.com.cn/furniture">
   <f:name>African Coffee Table</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
</f:table>

参考资料


本文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

原文发布于:https://cloud.tencent.com/developer/article/1351914

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JSON 序列化中的转义和 Unicode 编码

    本文比较完整地整理一下 JSON 编码中的转义,以及 JSON 对 Unicode 编码的处理。

    amc
  • 小面试官教你 MySQL——引擎、索引和算法

    弄懂了 MySQL 的基本 CURD 操作之后,下一个必须掌握的知识就是 MySQL 的索引。

    amc
  • Go 语言 time 包常用用法笔记

    Go 的时间操作基本上都用 time 包,比 C 的 time 函数和 timeval 等 struct 好用多了。不过 time 包还是有不少用法和其他语言不...

    amc
  • XML和JSO的面试题(修订版)

    JSON:JavaScript Object Notation 【JavaScript 对象表示法】.

    Java3y
  • XML+JSON面试题都在这里

    XML+JSON常见面试题 什么是JSON和XML 什么是JSON和XML JSON:JavaScript Object Notation 【JavaScrip...

    Java3y
  • 【面试】找工作必看的十道XML面试题

    XML并不依赖于其他编程语言,与SQL一样是编程人员所必备的技能之一,因此在任何技术工作面试之前准备一些XML问题都是很有意义的。老九君为大家整合了十道有关XM...

    老九君
  • Java简单面试题(XML)

    包括web开发人员的Java面试在内的各种面试中,XML面试题在各种编程工作的面试中很常见。XML是一种成熟的技术,经常作为从一个平台到其他平台传输数据的标准。...

    葆宁
  • 系统架构师论文-论XML技术在Internet平台上的应用

    2002年10月,我参与了一个三层在线商城的项目开发,该项目整合了来自不同商家的信息,方便在线用户的查询和购买。 在该项目中,我担任系统分析的工作。在分析设计...

    cwl_java
  • 系统架构师论文-XML在网上银行中的应用

    网上银行是指在Internet上提供银行服务,即银行的客户无须到银行柜台办理业务,可以在家庭、办公室等能够连入Internet的任何一处,登录到银行的网站进行交...

    cwl_java
  • XML是历史前进中的怪胎

    人的理性是有限的,甚至拙劣的,但理性中的人却很自负。互联网本身不是被理性事先设计出来的,但是我们总是想在互联网上再次理性设计,XML和区块链都是人类理性自负地结...

    Titan框架

扫码关注云+社区

领取腾讯云代金券