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