Python 任何人都有一个使用lxml.html中的element.sourceline方法的示例

Python 任何人都有一个使用lxml.html中的element.sourceline方法的示例,python,html,parsing,lxml,Python,Html,Parsing,Lxml,我希望我问得对。我正在试图弄清楚element.sourceline的功能,以及是否有办法使用它的功能。我尝试过用多种方法从html构建元素,但每次我迭代元素并请求sourceline时,我总是一无所获。当我尝试使用内置帮助时,我也没有得到任何帮助 我在谷歌上搜索了一个例子,但还没有找到 我知道这是一种元素而不是树的方法,但这是我能想到的最好的方法 为了回应Jim Garrison的举例要求 theTree=html.parse(open(r'c:\temp\testlxml.htm')) ch

我希望我问得对。我正在试图弄清楚element.sourceline的功能,以及是否有办法使用它的功能。我尝试过用多种方法从html构建元素,但每次我迭代元素并请求sourceline时,我总是一无所获。当我尝试使用内置帮助时,我也没有得到任何帮助

我在谷歌上搜索了一个例子,但还没有找到

我知道这是一种元素而不是树的方法,但这是我能想到的最好的方法

为了回应Jim Garrison的举例要求

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文件有19379行,所以我不确定您是否要查看它

我试过一种解决办法

>>> myroot=html.fromstring(xml)
>>> elementlines=[(e,e.sourceline) for e in myroot.iter()]
>>> elementlines
[(<Element doc at 12bb730>, None), (<Element foo at 12bb650>, None)]
>myroot=html.fromstring(xml)
>>>elementlines=[(e,e.sourceline)表示myroot.iter()中的e
>>>元素线
[(无),(无)]
当我对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)]
>myroot=etree.fromstring(xml)
>>>elementlines=[(e,e.sourceline)表示myroot.iter()中的e
>>>元素线
[(, 1), (, 2)]
但是我的源htm太乱了,我无法使用etree来浏览树
我收到一个错误

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导入etree
xml='\n西班牙本土\n'
root=etree.fromstring(xml)
打印root.find('foo').sourceline#2
root.append(etree.Element('bar'))
打印etree.tostring(根目录)
打印根目录。查找('bar')。源代码行#无

我很确定这同样适用于
lxml.html

它应该返回一个行号。发布一个您编写的代码示例和一个简单的XML文件,sourceline()对其不返回任何内容。我感谢您的努力,但似乎没有,尽管souceline显示为元素的方法/属性