Python - 读取格式不正确的 xml 文件



如果 XML 文件在名称属性<,>,",'中包含禁止字符的 XML,我该如何读取该文件? XML 具有超过 30k 行,目标是 pandas.dataframe

<rows>
<row number="164" item="9860404" name="160-30 Bracket" qty="1"/>
<row number="164" item="9860405" name="200-30 <> Bracket" qty="1" />
<row number="164" item="9860406" name="250-30 3/4" Bracket" qty="3" />
<row number="164" item="9860407" name="315-30 <-> Bracket" qty="4"/>
</rows>

您可以使用lxml.etree中的解析器解析示例数据HTMLParser

>>> from lxml import etree
>>> parser = etree.HTMLParser()
>>> doc =etree.parse(open('data.xml'), parser=parser)
>>> [elem.get('name') for elem in doc.xpath('//row')]
['160-30 Bracket', '200-30 <> Bracket', '250-30 3/4', '315-30 <-> Bracket']

请注意,使用 HTML 解析器解析数据会将文档包装在<html><body>元素中,以便文档结构最终如下所示:

<html><body><rows>
<row number="164" item="9860404" name="160-30 Bracket" qty="1"/>
<row number="164" item="9860405" name="200-30 &lt;&gt; Bracket" qty="1"/>
<row number="164" item="9860406" name="250-30 3/4" bracket="" qty="3"/>
<row number="164" item="9860407" name="315-30 &lt;-&gt; Bracket" qty="4"/>
</rows>
</body></html>

它不是一个XML文件,所以你不能使用XML工具读取它;你需要非XML工具。只有当您将其称为 XML 文件时,您才会混淆人们;最好告诉所有人您有一个非XML文件。

有一些工具旨在修复错误的XML,但是错误的XML有多种形状和大小,并且永远不可能在每种情况下都准确地生成您想要的内容。

生成此文件的人完全忽略了使用标准数据格式应该节省每个人的时间和金钱的要点。如果数据仍以某种其他形式存在,则应尝试重新生成 XML 并使其正确。

如果错误仅限于在属性值中不正确地使用<,那么您可以使用基于正则表达式的工具(例如awk,Perl或只是文本编辑器(来修复它。如果它在属性值中使用引号,那么你可能会被水淹没,无法区分原本是属性分隔符的引号和不是属性分隔符的引号。

最新更新