我有一个需要解析的xml片段。这是我尝试使用lxml
解析的两种方法:
s='''<Persons>
<Person>
<FirstName>Mark</FirstName>
<LastName>Tom</LastName>
</Person>
<Person>
<FirstName>Mark</FirstName>'''
>>> etree.fromstring(s)
lxml.etree.XMLSyntaxError: Premature end of data in tag Person line 6, line 7, column 30
>>> html.fromstring(s)
<Element persons at 0x11fc49908>
但是,我需要保持标签的大小写敏感-我不能像html
一样将它们全部转换为小写:但是,使用etree
会失败,因此我不得不使用html
解析器。
如何解决上述问题?标签必须是Persons
而不是persons
。
我想留在lxml
之内,但是到目前为止,我发现的唯一解决方案是使用BeautifulSoup
:
>>> from bs4 import BeautifulSoup as bs4
>>> bs4(s, 'xml')
<Persons>
...
答案 0 :(得分:1)
您仍然可以通过将"recover" mode设置为以下值来使用lxml
:
recover
-尝试通过损坏的XML进行解析
parser = etree.XMLParser(recover=True)
root = etree.fromstring(s, parser=parser)
演示:
In [2]: parser = etree.XMLParser(recover=True)
In [3]: root = etree.fromstring(s, parser=parser)
In [4]: root
Out[4]: <Element Persons at 0x10aba9e18>