可延伸標記式語言(英語:Extensible Markup Language,簡稱:XML)是一種標記式語言。標記指電腦所能理解的資訊符號,通過此種標記,電腦之間可以處理包含各種資訊的文章等。如何定義這些標記,既可以選擇國際通用的標記式語言,例如HTML,也可以使用像XML這樣由相關人士自由決定的標記式語言,這就是語言的可延伸性。XML是從標準通用標記式語言(SGML)中簡化修改出來的。它主要用到的有可延伸標記式語言、可延伸樣式語言(XSL)、XBRL和XPath等。
XML設計用來傳送及攜帶資料資訊,不用來表現或展示資料,HTML則用來表現資料,所以XML用途的焦點是它說明資料是什麼,以及攜帶資料資訊。
XML 1.0規範允許的(跳脫後的最終解碼值)合法字元: #x9(水平制表符)、#xA(回車字元)、#xD(換行符)、#x20-#xD7FF、#xE000-#xFFFD、#x10000-#x10FFFF。即任何Unicode字元,不包含surrogate blocks, FFFE, FFFF。
XML規範定義了5個"預定義實體"來表示特殊字元. XML也允許在每個文件定義任意數量的其它命名實體.
下表列出了5個XML預定義實體. 通過名字參照這些實體的格式為&name;
,例如, &
將繪製為&.
名字 | 字元 | Unicode碼位(十進位) | 標準 | 描述 |
---|---|---|---|---|
quot | " | U+0022 (34) | XML 1.0 | 雙引號 |
amp | & | U+0026 (38) | XML 1.0 | & |
apos | ' | U+0027 (39) | XML 1.0 | 單引號 |
lt | < | U+003C (60) | XML 1.0 | 小於 |
gt | > | U+003E (62) | XML 1.0 | 大於 |
XML處理器(Processor,也稱作XML parser)分析標記式語言並傳遞結構化資訊給應用(application)。
XML文件的字元分為標記(Markup)與內容(content)兩類。標記通常以<
開頭,以>
結尾;或者以字元&
開頭,以;
結尾。不是標記的字元就是內容。但是CDATA部分,分解符號<![CDATA[
與]]>
是標記,二者之間的文字為內容。 最外界的空白符是標記。
一個tag屬於標記結構,以<
開頭,以>
結尾。Tag名字是大小寫敏感,不能包括任何字元 !"#$%&'()*+,/;<=>?@[]^`~, 也不能有空格符, 不能以"-"或"."或數字開始。可分為三類:
元素是文件邏輯組成,或者在start-tag與匹配的end-tag之間,或者僅作為一個empty-element tag。例如:<greeting>Hello, world!</greeting>
. 另一個例子是: <line-break />
.
單個根(root)元素包含所有的其他元素。
屬性是一種標記結構,在start-tag或empty-element tag內部的「名字-值對」。例如:<img src="madonna.jpg" alt="Madonna" />
。每個元素中,一個屬性最多出現一次,一個屬性只能有一個值。
如果屬性有多個值,這需要採取XML協定以外的方式來表示,如採用逗號或分號間隔,對於CSS類或識別碼的名字可用空格來分隔。
XML文件如果以XML declaration開始,則表述了文件的一些資訊。如<?xml version="1.0" encoding="UTF-8"?>
.
XML定義結構、儲存資訊、傳送資訊。下例為小張傳送給大元的便條,儲存為XML。
<?xml version="1.0"?>
<小紙條>
<收件人>大元</收件人>
<發件人>小張</發件人>
<主題>問候</主題>
<具體內容>早啊,飯吃了沒? </具體內容>
</小纸條>
這XML文件僅是純粹的資訊標籤,這些標籤意義的展開依賴於應用它的程式。
每個XML文件都由XML聲明開始,在前面的代碼中的第一行就是XML聲明,<?xml version="1.0"?>。這一行代碼會告訴解析器或瀏覽器這個檔案應該按照XML規則進行解析。
但是,根元素到底叫<小紙條>還是<小便條>,則是由「文件類型定義(DTD)」或「XML綱要(XML Schema)」定義的。如果DTD規定根元素必須叫<小便條>,那麼若寫作<小紙條>就不符合要求。這種不符合DTD或XML綱要的要求的XML文件,被稱作不合法的XML,反之則是合法的XML。
XML檔案的第二行並不一定要包含文件元素;如果有注釋或者其他內容,文件元素可以遲些出現。
最常見的PI(processing instruction,像XML序言, 卻是不同類型的語法)是用來指定XML檔案的樣式表, 這個PI一般會直接放在XML序言之後,通常由Web瀏覽器使用,來將XML資料以特殊的樣式顯示出來。
XML的結構有一個缺陷,那就是不支援分影格(framing)。當多條XML訊息在TCP上傳輸的時候,無法基於XML協定來確定一條XML訊息是否已經結束。
與HTML一樣,可以使用Beautifulsoup
來解析XML文件,然後萃取出需要的資訊。
補充:
官方承認內建的
ElementTree
解析XML存在漏洞:https://docs.python.org/3/library/xml.etree.elementtree.html#