欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中l(wèi)xml.etree 和 ElementTree 的區(qū)別解析

 更新時間:2024年01月10日 12:09:04   作者:zqzgng  
lxml.etree 提供了更多的功能,例如 XPath、XSLT、Relax NG、 和 XML 模式支持,etree 對 Python unicode 字符串的想法與 ElementTree 不同,本文給大家介紹python中l(wèi)xml.etree 和 ElementTree 的區(qū)別,感興趣的朋友一起看看吧

python中l(wèi)xml.etree 和 ElementTree 的區(qū)別還是很明顯的。

1.導(dǎo)入方式不同

# etree
from lxml.etree import Element
# ElementTree
from elementtree.ElementTree import Element
# ElementTree in the Python 2.5 standard library
from xml.etree.ElementTree import Element

2.lxml.etree 提供了更多的功能,例如 XPath、XSLT、Relax NG、 和 XML 模式支持,這是 (c)ElementTree 不提供的。

3.etree 對 Python unicode 字符串的想法與 ElementTree 不同。 在 API 的大多數(shù)部分中,ElementTree 使用純字符串和 unicode 字符串 就像他們一樣。這包括 Element.text、Element.tail 和許多其他 地方。但是,默認情況下,ElementTree 分析器假定任何字符串 (str 或 unicode)包含 ASCII 數(shù)據(jù)。如果出現(xiàn)以下情況,它們會引發(fā)異常 字符串與預(yù)期的編碼不匹配。

etree 對純字符串 (str) 的想法與 ElementTree 相同。為 但是,對于 unicode 字符串,etree 在整個 API 中都假定它們是 Python unicode 編碼的字符串,而不是字節(jié)數(shù)據(jù)。這包括 解析 器。因此,將 XML unicode 數(shù)據(jù)傳遞到 Python unicode 字符串形式的 etree 解析器。這是一個錯誤,在 另一方面,如果 Unicode 字符串在其 XML 聲明中指定了編碼, 因為這與 Python unicode 的特征編碼相沖突 字符串。

4.eTree 允許通過 getParent() 方法導(dǎo)航到節(jié)點的父節(jié)點,并通過調(diào)用 getNext() 和 getPrevious() 導(dǎo)航到同級節(jié)點。 這在 ElementTree 中是不可能的,因為基礎(chǔ)樹模型不能 有這個信息。

5.當(dāng)嘗試使用__setitem__實際上不是 元素,但其他一些對象,etree 會引發(fā) TypeError,而 ElementTree 引發(fā) AssertionError。這也適用于其他一些地方 應(yīng)用程序接口。一般來說,etree 會盡量避免 AssertionErrors,而傾向于 更具體地說明異常的原因。

6.當(dāng)解析失敗時 iterparse() 中,ElementTree 最高可達版本 1.2.x 會引發(fā)低級 ExpatError,而不是像其他解析器那樣引發(fā) SyntaxError。lxml 和 ElementTree 1.3 都會為解析器錯誤引發(fā) ParseError。

7.lxml 中的 iterparse() 函數(shù)是基于 libxml2 實現(xiàn)的 解析器和樹生成器。這意味著對文檔的修改 在解析過程中,root 或當(dāng)前元素的祖先可能會刺激 解析器甚至段錯誤。雖然這在 Python 對象中不是問題 ElementTree 使用的結(jié)構(gòu),lxml 底層的 C 樹受其影響。 因此,lxml 上 iterparse() 的黃金法則是:不要觸摸 解析器稍后必須再次觸及的任何內(nèi)容。請參閱 LXML 解析器文檔。

8.ElementTree 在解析 XML 時忽略注釋和處理指令, 而 etree 將讀入它們并將它們視為 Comment 或 ProcessingInstruction 元素。這一點尤為明顯 在文本內(nèi)容中找到注釋,然后由 Comment 元素。

您可以通過將布爾值 remove_comments 和/或 remove_pis 關(guān)鍵字參數(shù)傳遞給您使用的解析器來禁用此行為。為 為了方便和支持可移植代碼,您還可以使用 etree。ETCompatXMLParser 而不是默認的 etree。XMLParser。它 嘗試提供與 ElementTree 解析器最接近的默認設(shè)置 盡可能。

9.lxml.etree 的 TreeBuilder 類使用不同的 start() 方法的簽名。它接受額外的 參數(shù) nsmap 來傳播 元素。確保兼容性 使用 ElementTree(不支持此參數(shù)),lxml 檢查 如果該方法在調(diào)用它之前接受 3 個參數(shù),否則 刪除命名空間映射。這應(yīng)該適用于大多數(shù)現(xiàn)有的 ElementTree 代碼,盡管可能仍然存在沖突的情況。

10.ElementTree 1.2 在序列化空注釋(無文本)時有一個錯誤 參數(shù)給定)添加到 XML,etree 會成功序列化它。

11.ElementTree 在序列化的注釋周圍添加空格,而 lxml 則這樣做 不。這意味著 ElementTree 序列化為的注釋文本“text” 在 lxml 中,“<!-- text -->”將變?yōu)?ldquo;<!--text-->”。

12.當(dāng)字符串 '*' 在 Element.iter() 和 .find*() 方法中用作標(biāo)簽過濾器時,ElementTree 返回樹中的所有元素,包括 注釋和處理說明。lxml.etree 只返回 real 元素, 即具有字符串標(biāo)簽名稱的樹節(jié)點。如果沒有過濾器,兩個庫 遍歷所有節(jié)點。

請注意,目前只有 lxml.etree 支持傳遞 Element 工廠 用作過濾器以僅選擇元素。兩個庫都支持傳遞 Comment 和 ProcessingInstruction 工廠來選擇 各自的樹節(jié)點。

13.ElementTree 將處理指令的目標(biāo)合并到 PI.text 中, 而 lxml.etree 將其放入 .target 屬性中并將其排除在 .text 屬性。因此,ElementTree 中的 pi.text 對應(yīng)于 lxml.etree 中的 pi.target + “ ” + pi.text。

14.因為 etree 是建立在 libxml2 之上的,libxml2 是命名空間前綴感知的, etree 保留命名空間聲明和前綴,而 ElementTree 則傾向于 提出自己的前綴(ns0、ns1 等)。當(dāng)沒有命名空間前綴時 但是,etree 也會創(chuàng)建 ElementTree 樣式前綴。

15.etree 在元素上有一個“prefix”屬性(只讀),使元素的 前綴,如果這是已知的,否則為 None(如果 all,或默認命名空間)。

16.etree 進一步允許將 'nsmap' 字典傳遞給 Element 和 SubElement 元素工廠,用于顯式映射命名空間前綴 命名空間 URI。這些將被轉(zhuǎn)換為 那個元素。這意味著在極少數(shù)情況下,您需要 構(gòu)造一個名為“nsmap”的屬性,您需要注意,與 ElementTree,則不能將其作為關(guān)鍵字參數(shù)傳遞給 Element 和 SubElement 工廠。

17.ElementTree 允許 QName 對象作為屬性值,并解析其 序列化的前綴(例如,如果“p”是“myns”的命名空間前綴,則屬性值 QName(“{myns}myname”) 變?yōu)?ldquo;p:myname”)。lxml.etree 還允許您從 QName 實例(以及 .text)設(shè)置屬性值 值),但它會立即解析它們的前綴并存儲純文本 價值。因此,如果以后修改前綴,例如將子樹移動到 不同的樹(重新分配前綴映射),文本值將 未更新,最終可能會得到一個未定義的前綴。

18.eTree 元素可以使用 copy.deepcopy() 和 copy.copy() 進行復(fù)制, 就像 ElementTree 一樣。但是,copy.copy() 不會創(chuàng)建一個 在樹之間共享元素的淺拷貝,因為這毫無意義 在 libxml2 樹的上下文中。請注意,lxml 可以深層復(fù)制樹 比 ElementTree 快得多,因此深度復(fù)制可能仍然很快 足以替換您案例中的淺層副本。

到此這篇關(guān)于python中l(wèi)xml.etree 和 ElementTree 的區(qū)別的文章就介紹到這了,更多相關(guān)python lxml.etree 和 ElementTree內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中ValueError報錯的原因和解決辦法

    Python中ValueError報錯的原因和解決辦法

    在Python編程中,ValueError是一種非常常見的異常類型,它通常發(fā)生在函數(shù)接收到一個有效類型但不適合該函數(shù)操作的值時,本文將深入探討ValueError的報錯原因、提供詳細的解決辦法,并通過豐富的代碼示例來加深理解,需要的朋友可以參考下
    2024-07-07
  • torch 中各種圖像格式轉(zhuǎn)換的實現(xiàn)方法

    torch 中各種圖像格式轉(zhuǎn)換的實現(xiàn)方法

    這篇文章主要介紹了torch 中各種圖像格式轉(zhuǎn)換的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Python爬蟲403錯誤的終極解決方案

    Python爬蟲403錯誤的終極解決方案

    爬蟲在爬取數(shù)據(jù)時,常常會遇到"HTTP Error 403: Forbidden"的提示,其實它只是一個HTTP狀態(tài)碼,表示你在請求一個資源文件但是nginx不允許你查看,下面這篇文章主要給大家介紹了關(guān)于Python爬蟲403錯誤的終極解決方案,需要的朋友可以參考下
    2023-05-05
  • Python基于template實現(xiàn)字符串替換

    Python基于template實現(xiàn)字符串替換

    這篇文章主要介紹了Python基于template實現(xiàn)字符串替換,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 解決json中ensure_ascii=False的問題

    解決json中ensure_ascii=False的問題

    這篇文章主要介紹了解決json中ensure_ascii=False的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 使用Python實現(xiàn)圖像顏色量化的方法

    使用Python實現(xiàn)圖像顏色量化的方法

    這篇文章主要介紹了使用Python進行圖像顏色量化,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Django 再談一談json序列化

    Django 再談一談json序列化

    這篇文章主要介紹了Django json序列化,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python實現(xiàn)微信自動回復(fù)功能

    python實現(xiàn)微信自動回復(fù)功能

    這篇文章主要為大家詳細介紹了使用python實現(xiàn)微信自動回復(fù)功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python實現(xiàn)監(jiān)控程序執(zhí)行時間并將其寫入日志的方法

    Python實現(xiàn)監(jiān)控程序執(zhí)行時間并將其寫入日志的方法

    這篇文章主要介紹了Python實現(xiàn)監(jiān)控程序執(zhí)行時間并將其寫入日志的方法,實例分析了Python日志操作的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • python+selenium?實現(xiàn)掃碼免密登錄示例代碼

    python+selenium?實現(xiàn)掃碼免密登錄示例代碼

    這篇文章主要介紹了python+selenium?實現(xiàn)掃碼免密登錄,首先掃碼登錄獲取cookies保存到本地未后面免密登錄做準(zhǔn)備,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07

最新評論