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

0 投票
1 回答
1142 浏览
提问于 2025-04-18 12:05

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

我正在使用 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 个回答

1

我觉得这是元素树(ET)正常的表现。原因在于元素树是如何表示文本节点的:只有作为元素第一个子节点的文本节点会用属性 text 来表示。

其他混合在一起的文本节点则被称为它们前面的兄弟节点的 tail,在这个例子中就是强元素的尾部。

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

撰写回答