我在Mac OS X 10.6.8上的Python 2.7.3中运行以下代码。
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
文件foo包含
<foo> AAA <bar> BBB </bar> XXX </foo>
输出
foo AAA
bar BBB
为什么我没有收到XXX
的文字?我该如何访问它?
由于
答案 0 :(得分:6)
您还必须
node.tail
考虑(或检查)。
答案 1 :(得分:6)
试试这个:
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
输出:
foo AAA None
bar BBB XXX
tail
属性保存元素结束标记之后的文本。
tail
是lxml和ElementTree的特性。有关详细信息,请参阅http://infohost.nmt.edu/tcc/help/pubs/pylxml/web/etree-view.html。