解析不完整 xml,保持大写

Parsing incomplete xml, maintaining capitalization

我有一个 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>
...

您仍然可以通过将 "recover" mode 设置为 lxml 来解决此问题:

recover - try hard to parse through broken 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>