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

Python - reading non well formed xml file

如果 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.etreeHTMLParser 解析器解析示例数据:

>>> 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 或只是一个文本编辑器)来修复它。如果它在属性值中使用引号,那么您可能会被套牢,无法区分哪些引号是属性定界符,哪些不是。