Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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修复损坏的XML_Python_Xml - Fatal编程技术网

使用python修复损坏的XML

使用python修复损坏的XML,python,xml,Python,Xml,我有多个xml文件,其中的标记没有正确关闭。他们经常被转移到下一行 我的XML 是否有任何类似python的方法将其转换为所需的XML,如下所示: <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> <item id

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

我的XML

是否有任何类似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>

我试过使用beautifulsoup。但是它的格式似乎不正确。

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

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

从bs4导入BeautifulSoup作为bs 使用openfile.xml,r作为f: xml_str=f.read;加载文件 xml=bsxml_str,lxml解析文件 使用openfile.xml,w作为f: f、 writeRepXML写漂亮的文件 注意:我们使用的是lxml解析器,需要使用

pip3 install lxml

编辑:无需删除换行符

一个简单的搜索和替换,即newline+>by>。如果您提供一些代码,我们可能会帮助您美化此组用于解析而不是编辑,您必须将其作为文本字符串进行编辑在这种特殊情况下,修复损坏可能不太困难。但是,每当你破坏了这样的数据,重要的是要找出并消除根本原因——首先是谁破坏了数据?@Stefan我没有足够的正则表达式技能来选择整个标记。我最近开始学习它。这种正则表达式有效吗^$@MATISS我知道,但是我有600个+文件,我没有力气去打开所有这些文件来编辑一行。请考虑提供一个特定于OP代码的答案。在使用LXML解析器时不应该发生这种情况。也许你有xml=bsxml\u str,请看这个屏幕截图。
pip3 install lxml