2012-09-13 73 views
3

我在Mac OS X 10.6.8上運行Python 2.7.3中的以下代碼。在python中迭代xml元素時缺少一些文本

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?我如何訪問它?

感謝

回答

5

試試這個:

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相比其他XML模型(如DOM)的一個特點。有關更多信息,請參見http://infohost.nmt.edu/tcc/help/pubs/pylxml/web/etree-view.html

+0

謝謝!這是一個我不知道的有趣的怪癖。 – APE

5

你也必須採取

node.tail 

考慮(或檢查它)。