簡體   English   中英

Python lxml:忽略XML聲明(錯誤)

[英]Python lxml: Ignore XML declaration (errors)

我試圖用lxml Python模塊解析文件瀏覽器Thunar的自定義操作文件( ~/.config/Thunar/uca.xml )。

出於某種原因,Thunar顯然在這些文件中寫了一個malformed declaration

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

顯然,該version預計將作為聲明中的第一個“屬性”出現。 如果我嘗試解析文件, lxml會引發XMLSyntaxError

不,我不能簡單地糾正聲明,因為Thunar一直用偽造的東西覆蓋它。

這很可能是Thunar的一個錯誤。

不過, 我想知道如何忽略lxml的XML聲明。

我知道我可以預處理XML文檔來過濾掉XML聲明。 但這似乎並不優雅。 由於XML似乎默認為1.0版和UTF-8編碼,因此肯定有可能忽略聲明並假設在lxml 我沒有在文檔中或谷歌上找到任何內容,我可能忽略了一些東西。

我對Thunar知之甚少,但如果它在問題中產生XML聲明,那么這就是一個bug。 具有不正確的XML聲明會使文檔格式錯誤。

XML語法為XML聲明中的項指定了一個正確的順序。 version必須先到第二個encoding http://w3.org/TR/xml/#NT-XMLDecl

但是,使用lxml,您可以使用將recover選項設置為True的解析器實例進行解析。 它適用於這種情況。 錯誤的XML聲明被忽略。

from lxml import etree 

parser = etree.XMLParser(recover=True)
tree = etree.parse('uca.xml', parser)

請參閱http://lxml.de/api/lxml.etree.XMLParser-class.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM