У любого есть пример, который использует метод element.sourceline из lxml.html - PullRequest
1 голос
/ 21 августа 2010

Надеюсь, я правильно спросил.Я пытаюсь выяснить, что делает element.sourceline, и если есть какой-то способ, я могу использовать его возможности.Я пытался создать свои элементы из HTML несколькими способами, но каждый раз, когда я перебираю свои элементы и спрашиваю исходную строку, я всегда получаю None.Когда я попытался использовать встроенную помощь, я тоже ничего не получил.

У меня есть Googled для примера, но пока ничего не найдено.

Я знаю, что это метод элементовне деревья, но это лучшее, что я смог придумать.

В ответ на запрос Джима Гаррисона о примере

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 для исследования дерева, я получаю ошибку

1 Ответ

3 голосов
/ 21 августа 2010

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.

...