簡體   English   中英

BeautifulSoup4不接受有效的XML

[英]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.

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