lxml.objectify.parse 在 fromstring 工作时失败

lxml.objectify.parse fails while fromstring works

在我使用文件 IO 而不是字符串 IO 时,正在努力解决为什么 lxml.objectify.parse 失败的问题。

以下代码有效:

with open(logPath,'r', encoding='utf-8') as f:
    xml = f.read()
    root = objectify.fromstring(xml)

print(root.tag)

以下代码因错误而失败:

AttributeError: 'lxml.etree._ElementTree' object has no attribute 'tag'

with open(pelogPath,'r', encoding='utf-8') as f:
    #xml = f.read()
    root = objectify.parse(f)

print(root.tag)

那是因为 fromstring() 会直接 return 根元素:

Parses an XML document or fragment from a string. Returns the root node (or the result returned by a parser target).

parse() 会 return 一个 ElementTree 对象:

Return an ElementTree object loaded with source elements.

在这种情况下使用 getroot() 获取根元素:

tree = objectify.parse(f)
root = tree.getroot()