[英]BeautifulSoup4 not accepting valid XML
我正在嘗試打開一個有效的xml文件,用lxml-xml
對其進行解析,對其進行美化,最后將其保存到其他文件中。
我的代碼如下:
def main(path_to_config):
with open(f'configs/{path_to_config}', 'r') as file:
contents = file.read()
soup = BeautifulSoup(contents, 'xml')
with open(f'pretty_xml/{path_to_config.split("_")[0]}.xml', 'w') as new_file:
new_file.write(soup.prettify())
不幸的是,無論文件中放入什么內容,解析都不會生成有效的xml。 單行<?xml version="1.0" encoding="utf-8"?>
已保存到pretty_config/
文件中。 我已經使用多個在線驗證器驗證了我傳遞的xml是有效的。
我試過只用文件替換file.read()
,沒有運氣。 我也嘗試過僅用xml字符串替換它,該字符串可以工作並驗證我的解析器是否正常工作,並且在打開文件並將內容傳遞給BeautifulSoup
之間發生了BeautifulSoup
。
任何幫助,將不勝感激。
更新:
我的xml文件只有一行<note><time>twelve</time></note>
。
作為健全性檢查,我添加了assert contents == '<note><time>twelve</time></note>'
因為當我將字符串傳遞給BeautifulSoup
,解析器沒有問題。 這行新代碼引發了AssertionError
,我完全不確定如何操作。 字符串應該不一樣嗎? 我將.py文件中的字符串直接復制到.xml文件中,沒有其他空格或任何其他字符。
我的文件開頭有一個BOM,但沒有從.py文件復制到.xml文件的副本中被覆蓋。
由於@snakecharmerb的建議使用repr(contents)
查看我的字符串的真實表示,我發現了這一點,並發現該值是'\\'\\\<note><time>twelve</time></note>\\''
。 \\ ufeff是BOM表 ,需要刪除。
我在函數的開頭添加了以下幾行,它可以修復錯誤。
s = open(f'configs/{path_to_config}', mode='r', encoding='utf-8-sig').read()
open(f'configs/{path_to_config}', mode='w', encoding='utf-8').write(s)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.