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 范例。可以看到,一些關鍵字符比如雙引號 " 是需要轉義的。</note><main_page id="1307425"><href><![CDATA[https://cloud.tencent.com/developer/column/4101]]></href><name>amc</name></main_page> </readme>以下內容主要根據上述范例進行說明。
概念和關鍵詞
- XML:可擴展標記語言(EXtensible Markup Language)
- XML 文檔:上述范例就是一個 XML 文檔
- 元素:一個 <xxx>...</xxx> 對及其中間的部分加起來,就是一個元素
- XML 標簽(Tags):范例中的 <xxx> 和 </xxx> 文字就是一對標簽
- 根元素:每個 XML 文檔需要有且只有一個根元素,這個元素是所有元素的祖先元素
- 子元素(Children)、同胞元素(Siblings):范例中 <date> 元素下的 <year>、<mon>、<mday> 元素就是子元素,這幾個子元素之間互為同胞元素
- 文本內容(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 中有五個預定義的實體引用,在使用的時候需要 “轉義”:
| 小于號 | < | < |
| 大于號 | > | > |
| ”and“ 符號 | & | & |
| 單引號 | ' | ' |
| 雙引號 | " | " |
其中只有 < 和 & 是確實需要特殊處理的,但是作為規范,上述所有符號實際操作中均應處理。
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>參考資料
- XML 編碼 - W3school 在線教程
- RapidXML解析CDATA類型節點的問題
- XML 宣告 XML 標準
- XML 在線格式化 - 1
- XML 在線格式化 - 2
本文章采用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。
本文地址:https://segmentfault.com/a/1190000016649785
原文發布于:https://cloud.tencent.com/developer/article/1351914,也是本人的專欄。
總結
以上是生活随笔為你收集整理的XML 语法速查笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django数据查询方法总结
- 下一篇: 机器视觉系统图像采卡基本概念