XML 语法速查笔记
相比起 Json,XML 是一種相對(duì)古老和復(fù)雜、但功能更加強(qiáng)大的數(shù)據(jù)存儲(chǔ)/傳輸格式。也因?yàn)槠鋸?fù)雜,有一些語(yǔ)法需要記錄一下,在使用多種語(yǔ)言進(jìn)行 XML 操作的時(shí)候備查。
范例
下面是一個(gè)相對(duì)比較完整的 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>這是一個(gè)示例性質(zhì)的 XML 范例。可以看到,一些關(guān)鍵字符比如雙引號(hào) " 是需要轉(zhuǎn)義的。</note><main_page id="1307425"><href><![CDATA[https://cloud.tencent.com/developer/column/4101]]></href><name>amc</name></main_page> </readme>以下內(nèi)容主要根據(jù)上述范例進(jìn)行說(shuō)明。
概念和關(guān)鍵詞
- XML:可擴(kuò)展標(biāo)記語(yǔ)言(EXtensible Markup Language)
- XML 文檔:上述范例就是一個(gè) XML 文檔
- 元素:一個(gè) <xxx>...</xxx> 對(duì)及其中間的部分加起來(lái),就是一個(gè)元素
- XML 標(biāo)簽(Tags):范例中的 <xxx> 和 </xxx> 文字就是一對(duì)標(biāo)簽
- 根元素:每個(gè) XML 文檔需要有且只有一個(gè)根元素,這個(gè)元素是所有元素的祖先元素
- 子元素(Children)、同胞元素(Siblings):范例中 <date> 元素下的 <year>、<mon>、<mday> 元素就是子元素,這幾個(gè)子元素之間互為同胞元素
- 文本內(nèi)容(Text):范例中,<author> 元素中的 Andrew 就是文本內(nèi)容;同理 <date> 元素下的 2018-10-11 也是文本內(nèi)容
- 屬性(Attributes):范例中 main_page 元素中有一段文字 id="1307425",這就是元素 main_page 的屬性,其屬性名為 "id",屬性值 為 “1307425”。
語(yǔ)法規(guī)則速查
- 所有 XML 元素均需要有關(guān)閉標(biāo)簽,比如 <name> 均必須跟著一個(gè) </name> 結(jié)尾
- XML 標(biāo)簽大小寫(xiě)敏感
- XML 必須正確地嵌套
- XML 必須有且只有一個(gè)根元素
- 屬性值必須加上引號(hào),至于屬性名則無(wú)需引號(hào)。
XML 元素命名規(guī)則
強(qiáng)制性的命名規(guī)則如下:
- 元素命名只包含文字(包括非英文的文字)、數(shù)字、字符
- 不能以 “XML” 或其他大寫(xiě)轉(zhuǎn)換后為 “XML” 的字符串開(kāi)頭
- 不能包含空格
約定俗成(建議)的命名規(guī)則,除了上述幾條之外,還有:
- 不要使用減號(hào)/連字符 “-”,建議使用下劃線 “_”
- 避免使用點(diǎn) “.” 和冒號(hào) “:”
- 不要使用非 ascii 字符
屬性
建議避免使用屬性,而是以子元素 + 文本內(nèi)容的方式來(lái)替代。比如:
<date>2018-10-11</date>建議替換成范例中的:
<date>2018-10-11<!--可加可不加,加上可以作為對(duì)老代碼的兼容--><year>2018</year><mon>10</mon><mday>11</mday> </date>“轉(zhuǎn)義”
這里借用了 C/C++ 里格式化字符串的 “轉(zhuǎn)義” 一詞,但是實(shí)際上 XML 沒(méi)有這個(gè)名詞,而是 “實(shí)體引用”。XML 中有五個(gè)預(yù)定義的實(shí)體引用,在使用的時(shí)候需要 “轉(zhuǎn)義”:
| 小于號(hào) | < | < |
| 大于號(hào) | > | > |
| ”and“ 符號(hào) | & | & |
| 單引號(hào) | ' | ' |
| 雙引號(hào) | " | " |
其中只有 < 和 & 是確實(shí)需要特殊處理的,但是作為規(guī)范,上述所有符號(hào)實(shí)際操作中均應(yīng)處理。
XML CDATA
XML CDATA 是一個(gè)關(guān)鍵字,其包含的內(nèi)容不會(huì)被 XML 解析器解析。CDATA 采用 <![CDATA 開(kāi)頭,用 ]]> 結(jié)尾。比如范例中的:
<href><![CDATA[https://cloud.tencent.com/developer/column/4101]]></href>注意不同語(yǔ)言或庫(kù)對(duì) CDATA 的解析方式可能會(huì)有所不同,比如 Python 解析 CDATA 后會(huì)得到一個(gè)普通的 text 值,但是 RapidXML 則會(huì)得到一個(gè)子元素。
CDATA 也有限制,就是正文中不能包含 ]]>,否則會(huì)導(dǎo)致解析錯(cuò)誤。
XML 命名空間
這個(gè)功能目前筆者覺(jué)得比較少用,不過(guò)還是記錄一下。命名空間約定使用冒號(hào)進(jìn)行分分隔。命名空間可以手動(dòng)指定,如:
<f:table><f:name>African Coffee Table</f:name><f:width>80</f:width><f:length>120</f:length> </f:table>實(shí)操中,推薦加上命名空間屬性 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>參考資料
- XML 編碼 - W3school 在線教程
- RapidXML解析CDATA類(lèi)型節(jié)點(diǎn)的問(wèn)題
- XML 宣告 XML 標(biāo)準(zhǔn)
- XML 在線格式化 - 1
- XML 在線格式化 - 2
本文章采用 知識(shí)共享署名-非商業(yè)性使用-相同方式共享 4.0 國(guó)際許可協(xié)議 進(jìn)行許可。
本文地址:https://segmentfault.com/a/1190000016649785
原文發(fā)布于:https://cloud.tencent.com/developer/article/1351914,也是本人的專(zhuān)欄。
總結(jié)
以上是生活随笔為你收集整理的XML 语法速查笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Django数据查询方法总结
- 下一篇: ASP.NET Core 2.0使用Lo