lxml :: etree :: _ ElementStringResult.getparent()工作不正常

时间:2014-07-04 09:16:27

标签: python lxml

我没有找到任何人解释这个错误...

我正在使用lxml 3.1.0。

当存在类似的HTML / XML时:

<h1 class="fn"><strong class="brand">Lange</strong> XT 100 LV Ski Boots 2014</h1>

字符串“XT 100 LV Ski Boots 2014”的_ElementStringResult将在我们运行时返回:

>> elemstr = tree.xpath('//body//h1/text()')[0]

然而,当我们运行如下时,我们会得到......

>> parent = elemstr.getparent()
>> tree.getpath(parent)
/html/body/therestofthepath/h1/strong

有没有人有这样的问题?有没有其他方法手动检查文本是否相同,否则检查父母的文本孩子?

1 个答案:

答案 0 :(得分:1)

我认为这是元素树(ET)的正确行为。原因源于ET表示文本节点的方式:只有文本节点是元素子元素的第一个,由属性 text 表示。

其他混合文本节点是其前一个兄弟的 tail ,在本例中是strong元素。

import lxml.etree

xml = """<h1 class="fn"><strong class="brand">Lange</strong> XT 100 LV Ski Boots 2014</h1>"""

tree = lxml.etree.fromstring(xml)
elemstr = tree.xpath('//h1/text()')[0]
print elemstr.getparent().tail