我没有找到任何人解释这个错误...
我正在使用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
有没有人有这样的问题?有没有其他方法手动检查文本是否相同,否则检查父母的文本孩子?
答案 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