使用Python2.7为lxml-iterparse函数使用字符串绕过文件作为参数



我正在使用lxml.tree函数iteparse((在xml树上进行交互。

这可以与输入文件一起工作

xml_source = "formatted_html_diff.xml"
context = ET.iterparse(xml_source, events=("start",))
event, root = context.next()

但是,我希望在文件中使用一个包含相同信息的字符串。

我试过使用

context = ET.iterparse(StringIO(result), events=("start",))

但这会导致以下错误:

Traceback (most recent call last):
File "c:/Users/pag/Documents/12_raw_handle/remove_from_xhtmlv02.py", line 96, in <module>
event, root = context.next()
File "srclxmliterparse.pxi", line 209, in lxml.etree.iterparse.__next__
TypeError: reading file objects must return bytes objects

有人知道我该如何解决这个错误吗?

提前谢谢。

使用BytesIO而不是StringIO。以下代码适用于Python 2.7和Python 3:

from lxml import etree 
from io import BytesIO

xml = """
<root>
<a/>
<b/>
</root>"""

context = etree.iterparse(BytesIO(xml.encode("UTF-8")), events=("start",))

print(next(context))
print(next(context))
print(next(context))

输出:

('start', <Element root at 0x315dc10>)
('start', <Element a at 0x315dbc0>)
('start', <Element b at 0x315db98>)

最新更新