【问题标题】:missing some text when iterating xml elements in python在 python 中迭代 xml 元素时缺少一些文本
【发布时间】:2012-09-13 18:09:33
【问题描述】:

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

谢谢

【问题讨论】:

    标签: python xml xpath lxml


    【解决方案1】:

    试试这个:

    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 了解更多信息。

    【讨论】:

    • 谢谢!这是我不知道的一个有趣的怪癖。
    【解决方案2】:

    你也得吃

    node.tail
    

    考虑(或检查)。

    【讨论】:

      猜你喜欢
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多