解析不完整 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>
我有一个 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>