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

Python-读取格式不正确的xml文件,python,xml,elementtree,Python,Xml,Elementtree,如果XML文件的名称属性“,”中包含禁止字符的XML,如何读取该XML文件? XML有超过30000行,目标是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 numbe

如果XML文件的名称属性“,”中包含禁止字符的XML,如何读取该XML文件? XML有超过30000行,目标是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']
来自lxml导入etree的
>>
>>>parser=etree.HTMLParser()
>>>doc=etree.parse(open('data.xml'),parser=parser)
>>>[doc.xpath('//行')中元素的elem.get('name')]
[‘160-30括号’、‘200-30括号’、‘250-30 3/4’、‘315-30括号’]
请注意,使用HTML解析器解析数据时,会将文档包装在
元素中,以便文档结构看起来像:

<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并使其正确


如果错误仅限于不正确使用
,则每行的
name
属性格式相同,例如
name=“。。。括号“
?不。这只是一个示例。我可以添加编码UTF-8吗?可能。你是说读取它?还是在其他地方写入数据?我相信读取时默认使用UTF-8,但我不确定。