XML简介

关键术语

这部分材料基于XML规范说明。这并非出现在XML中的一份所有构建的全面清单;这提供了对日常使用中经常会碰到的关键构建的介绍。

字符

一份XML文档是一串字符串。几乎每个合法Unicode字符都可以出现在一份XML文档中。

XML处理器与应用

XML处理器分析标记并将结构化信息传递给应用。规范对XML处理器必须做什么必须不能做什么提出要求,但是对XML的应用在此范围之外。处理器(XML规范如此称呼)通俗来讲就是一个XML解析器

标记与内容

构成一份XML文档的字符被划分为标记(markup)内容(content),这对于含有简单语法规则的应用而言可以进行区分。一般来说,由<字符开头并以>字符结尾的字符串构成标记,或者标记也可以用&开头并以;结尾的字符串构成。不作为标记的字符串就是内容。然而。在一个CDATA段中,<![CDATA[]]>分隔符被分类为标记,而在它们之间的文本则被分类为内容。在最外层元素的前后空格符被分类为标记。

标签

一个标签(tag)是一个标记构建,以<开头并以>结尾。标签有以下三种风格:

  1. 起始标签:比如<section>
  2. 结束标签:比如</section>
  3. 空元素标签:比如<line-break />

元素

一个元素(element)是一个逻辑文档部分,它要么以起始标签开头并以匹配的结束标签结尾,要么仅由一个空元素标签构成。如果存在起始标签与结束标签之间的字符,那么这些字符为元素的内容,并且也可以含有标记,包括其他元素,那么这些元素则称为子元素(child elements)。一个例子是

<greeting>Hello, world!</greeting>

上述代码表示一个“ greeting”元素。还有一个例子是:

<line-break />

上述代码则表示一个行分隔元素。

属性

一个属性(attribute)是一个标记构建,由一个存在于起始标签或空元素标签内的名字-值对构成。一个例子是:

<img src="madonna.jpg" alt="Madonna" />

这里,属性名为“src”和“alt”,它们的值分别为"madonna.jpg"和" Madonna"。另一个例子是:

<step number="3">Connect A to B.</step>

这里属性名为“number”,它的值为"3"。一个XML属性只能含有一单个值,并且每个属性在每一元素上最多只能出现一次。在通常我们需要一个含有多个值的列表的情况下,这必须通过将该列表编码为一个良好形式的XML属性,并且带有跨越XML自身所定义的某些格式才能实现。通常,这要么是以逗号或分号分隔的列表,要么倘若各个值已知不包含空格,那么也可以使用空格作为分隔符来使用。比如:

<div class="inner greeting-box">Welcome!</div>

这里,属性“class”具有值"inner greeting-box"并且也指定了两个CSS类名“ inner”和“greeting-box”。

XML声明

XML文档可以用一个XML声明开头,该声明描述了有关它们自己的一些信息。比如:

<?xml version="1.0" encoding="UTF-8"?>

字符与转义

XML整个文档由Unicode全系列的编码字符构成。除了一小部分特别排除的控制字符,任一由Unicode定义的字符都可以在XML文档内容中出现。
XML包含了标识构成该文档的Unicode字符的编码的工具。并且对于表达字符,出于某些原因,不能被直接使用。

有效字符

在XML1.0文档中,以下范围的Unicode码点都是有效的:

  1. U+0009(水平制表符),U+000A(换行),U+000D (回车):这些是在XML1.0中所接受的仅有的C0控制字符;
  2. U+0020~U+D7FF,U+E000~U+FFFD:这排除了某些(但不是全部)BMP(基本多语言平面)中的非字符(所有替代编码,还有U+FFFE和U+FFFF被禁用);
  3. U+10000~U+10FFFF:这包含了补充屏幕中的所有 码点,包括非字符。
    XML1.1扩展了上述允许的字符集,添加了范围U+0001~U+001F范围的字符。同时,它对C0和C1控制字符(而非U+0009水平制表符,U+000A换行符,U+000D回车符,以及U+0085下一行符)的使用做了限制,要求它们以转义的形式来书写。比如,U+0001必须要写作为&#x01;或与其等价的转义字符。在C1字符的情况下,该约束是向后兼容的;引入该约束是能检测出通常的编码错误。
    码点U+0000(空)是仅有的在XML1.0和XML1.1文档中不被允许的字符。

编码检测

Unicode字符集可以用几种不同的方式编码为字节用于存储或传输。Unicode自身定义了覆盖整个字符集的编码方式,为人熟知的就是UTF-8和UTF-16。在早先的时候还有许多其他文本编码,比如ASCII和ISO/IEC 8859等等,它们的字符集基本上就是Unicode字符集的子集。

XML允许使用任一Unicode所定义的编码,以及出现在Unicode中的字符的其他编码。XML也提供了一种机制,一个XML处理器可以借此可靠地、而不需要事先获悉来判定当前正在使用哪种编码。除了UTF-8和UTF-16以外的编码没必要被每种XML解析器识别。

转义

XML提供了转义工具,用于那些直接包含在XML文档中可能会引发问题的字符。比如:
・比如<&作为关键语法标记而不能直接出现在CDATA段之外的内容中。在XML实体值中可允许使用<,但不推荐。
・某些只支持Unicode子集的字符编码的解析器。比如,用ASCII编码一个XML文档是合法的,但ASCII缺乏诸如“é”这种字符的码点。
・在作者的机器上可能无法打出的字符。
・某些字符具有不能区别于其他字符的字形(glyph),比如不换行空格字符(&#x00a0;)以及空格符(&#x0020;);还有西里尔大写字母А(&#x0410;)以及拉丁大写字母A(&#x0041;)。(另外,在Android的string资源xml文件中,空格符使用:&#xa0;。)
XML定义了五种预定义的实体:
&lt;表示“<”;
&gt;表示“>”;
&amp;表示“&”;
&apos;表示“'”;
&quot;表示“"”。

所有允许的Unicode字符都可以用一个数字字符参考来表达。我们看一下中文字符“中”,其Unicode中的数字码为十六进制4E2D,十进制为20013。如果一个用户的键盘没有提供输入该字符的方法,那么可以在XML文档中以&#20013;&#x4e2d;来使用。
&#0;是不被允许的,因为空字符是被XML排除在外的控制字符。

注释

注释可以出现在一个文档中其他标记外部的任何地方。注释不能出现在XML的声明之前。注释以``结束。出于对SGML的兼容性,字符串“--”(双连接号)在注释内不允许出现;这意味着注释不能被嵌套。在注释内,“&”符号没有特殊的重要性,因此实体和字符引用不会被如此识别,并且也没有办法来表示文档编码字符集之外的其他字符。
一个有效注释的例子如下:

<!--no need to escape <code> & such in comments-->

国际化使用

XML1.0(第五个版本)以及XML1.1支持直接在元素名、属性、注释、字符数据以及处理指令中使用大部分的Unicode字符。以下是一个良好形式的包含中文、亚美尼亚文与西里尔字母的XML文档:

<?xml version="1.0" encoding="UTF-8"?>
<俄语 լեզու="ռուսերեն">данные</俄语>

上述XML文档中所指定的字符编码格式为UTF-8。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容