我希望我说得对。我试图找出element.sourceline的作用,以及是否有某些方法可以使用它的功能。我尝试过多种方式从html构建我的元素,但每次迭代我的元素并询问sourceline我总是得到None。当我尝试使用内置帮助时,我也没有得到任何东西。
我用谷歌搜索了一个例子,但还没有找到。
我知道这是一种元素而不是树木的方法,但这是我能够提出的最佳方法。
回应吉姆加里森的一个例子的要求
theTree=html.parse(open(r'c:\temp\testlxml.htm'))
check_source
the_elements=[(e,e.sourceline) for e in theTree.iter()] #trying to get the sourceline
for each in the_elements:
if each[1]!=None:
check_source.append(each)
当我运行此len(check_source)== 0
时我的htm文件有19,379行,所以我不确定你想看到它
我试过一个解决方案
>>> myroot=html.fromstring(xml)
>>> elementlines=[(e,e.sourceline) for e in myroot.iter()]
>>> elementlines
[(<Element doc at 12bb730>, None), (<Element foo at 12bb650>, None)]
当我和etree做同样的事情时,我会得到所展示的内容
>>> myroot=etree.fromstring(xml)
>>> elementlines=[(e,e.sourceline) for e in myroot.iter()]
>>> elementlines
[(<Element doc at 36a6b70>, 1), (<Element foo at 277b4e0>, 2)]
但我的源htm太乱了我不能用etree来探索这棵树 我收到错误
答案 0 :(得分:3)
sourceline
将返回解析文档时确定的行号。因此它不适用于通过API添加的元素。例如:
from lxml import etree
xml = '<doc>\n<foo>rain in spain</foo>\n</doc>'
root = etree.fromstring(xml)
print root.find('foo').sourceline # 2
root.append(etree.Element('bar'))
print etree.tostring(root)
print root.find('bar').sourceline # None
我很确定这同样适用于lxml.html
。