使用python修复损坏的XML



我有多个xml文件,其中的标记没有正确关闭。他们经常被移到下一行。

我的XML

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body> 
<item id='my-img' href='images/dp.jpg' media-type='image/jpeg'/
>     
</note>

有没有像下面这样的Python方法可以将其转换为所需的XML?:

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body> 
<item id='my-img' href='images/dp.jpg' media-type='image/jpeg'/>     
</note>

我试过用美容素。但它似乎没有正确格式化。

我能想到的最简单的方法是完全删除换行符,加载xml并保存一个预定义的版本。默认的repr只修复标签,但保持格式不变。

from bs4 import BeautifulSoup as bs
with open("file.xml","r") as f:
xml_str = f.read();                   # Load file
xml = bs(xml_str, "lxml")             # parse file 
with open("file.xml","w") as f:
f.write(repr(xml))                    # write pretty file

注意:我们使用的是需要使用安装的lxml解析器

pip3 install lxml

编辑:无需删除换行

这完全取决于需要修复多少xml字段,以及其中是否有模式。从您举的例子来看,查找和替换可能更容易使用(例如使用正则表达式(。