Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python BeautifulSoup4不接受有效的XML_Python_Xml_Beautifulsoup - Fatal编程技术网

Python BeautifulSoup4不接受有效的XML

Python BeautifulSoup4不接受有效的XML,python,xml,beautifulsoup,Python,Xml,Beautifulsoup,我试图打开一个有效的xml文件,用lxmlxml解析它,修饰它,最后将它保存到另一个文件中 我的代码如下: 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

我试图打开一个有效的xml文件,用
lxmlxml
解析它,修饰它,最后将它保存到另一个文件中

我的代码如下:

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。单行
是保存到
pretty\u config/
文件中的全部内容。我已经使用多个在线验证器验证了我传递的xml是有效的

我尝试过用文件替换
文件。read()
,但运气不好。我还尝试用一个xml字符串来代替它,它可以工作并验证我的解析器是否正常工作,以及在打开文件和将内容传递到
BeautifulSoup
之间是否有什么中断

在此方面的任何帮助都将不胜感激

更新:

我的xml文件只有一行,
12


作为健全性检查,我添加了
assert contents=='12'
,就像我将字符串传递给
BeautifulSoup
解析器没有问题一样。这一新行抛出了一个断言错误,我完全不确定如何抛出。字符串是否应该不相同?我将.py文件中的字符串直接复制到.xml文件,没有额外的空格或任何其他字符。

我的文件开头有一个BOM表,从.py文件复制粘贴到.xml文件不会覆盖该BOM表

我发现这一点是因为@snakecharmerb建议使用
repr(contents)
来查看字符串的真实表示形式,并发现值为
\\\\\\ufeffeft12\
。\ufeff是一个文件,需要删除

我在函数的开头添加了以下几行,它修复了错误

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)

@snakecharmerb
repr(contents)
返回
'\'\'\\ufeff十二个\'
我不知道如何解释第一个
\'\\ufeff
,或者这是什么。谢谢@snakecharmerb。显然\ufeff是一个BOM(字节顺序标记),当我将值从.py文件复制粘贴到.xml文件时,它没有被删除。当您右键单击“删除BOM”时,PyCharm有一个选项,我这样做了,文件解析正确。@snakecharmerb我试图指定不同的编码,但似乎没有什么区别。