解析不完整的xml,保持大小写

时间:2018-12-30 02:42:28

标签: python xml lxml

我有一个需要解析的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>
...

1 个答案:

答案 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>