在python中迭代xml元素时遗漏了一些文本

时间:2012-09-13 18:09:33

标签: python xml xpath lxml

我在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的文字?我该如何访问它?

由于

2 个答案:

答案 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属性保存元素结束标记之后的文本。

与其他XML模型(如DOM)相比,

tail是lxml和ElementTree的特性。有关详细信息,请参阅http://infohost.nmt.edu/tcc/help/pubs/pylxml/web/etree-view.html