Prowadzę następujący kod w Pythonie 2.7.3 w systemie Mac OS X 10.6.8.

import StringIO
from lxml import etree
f = open('./foo', 'r')
doc = ""
while 1:
    line = f.readline()
    doc += line
    if line == "":
        break
tree = etree.parse(StringIO.StringIO(doc), etree.HTMLParser())
r = tree.xpath('//foo')
for i in r:
    for j in i.iter():
        print j.tag, j.text

I zawiera plik foo

<foo> AAA <bar> BBB </bar> XXX </foo>

Wynik jest

foo AAA
bar BBB

Dlaczego nie dostaję tekstu XXX? Jak mogę uzyskać dostęp do niego?

Dzięki

3
APE 13 wrzesień 2012, 22:09

2 odpowiedzi

Najlepsza odpowiedź

Spróbuj tego:

from lxml import etree

tree = etree.fromstring("<foo> AAA <bar> BBB </bar> XXX </foo>")
foos = tree.xpath('//foo')

for foo in foos:
    for j in foo.iter():
        print j.tag, j.text, j.tail

Wynik:

foo  AAA  None
bar  BBB   XXX 

{x0}} atrybut posiada tekst po zakończeniu znacznik elementu.

tail jest osobliwością LXML i ElementRee w porównaniu do innych modeli XML, takich jak Dom. Zobacz http://infohost.nmt.edu/tcc/ Pomoc / puby / pylxml / Web / Etree-View.html Więcej informacji.

7
mzjn 13 wrzesień 2012, 18:43

Musisz też wziąć

node.tail

Pod uwagę konto (lub sprawdź go).

6
Andreas Jung 13 wrzesień 2012, 18:13