对这两种方法的效果有些困惑。这是一个简单的字符串:
test = """
<p> This is my head <h1> this is my middle </h1> and this is my tail.</p>
"""
我们使用此字符串创建两个根:
from lxml import html, etree
root_e = etree.fromstring(test)
root_h = html.fromstring(test)
让我们看看树木的样子:
tree_e = etree.ElementTree(root_e)
for elem in root_e.iter():
print(tree_e.getpath(elem))
输出为:
/p
/p/h1
这是我所期望的。但是使用:
tree_h = etree.ElementTree(root_h)
for elem in root_h.iter():
print(tree_h.getpath(elem))
现在输出为:
/html/div
/div/p
/div/h1
我没想到。随之而来的是奇怪的后果。各种xpath表达式在两棵树中的工作方式相同,但其他的则不同。例如
root_h.xpath('/html/div')[0].text_content()
输出整个字符串文本(带有换行符),尽管test
中既没有html
也没有div
。另一方面,
root_h.xpath('/html/div')[0].text
什么都不做。
那为什么要区别,以及什么时候应该使用其中一个?