【问题标题】:lxml::etree::_ElementStringResult.getparent() works incorrectlylxml::etree::_ElementStringResult.getparent() 工作不正确
【发布时间】:2014-07-04 09:16:26
【问题描述】:

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

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

有人遇到过这样的问题吗?有没有其他方法可以手动检查文本是否相同,否则检查父级的文本子级?

【问题讨论】:

  • 没有什么是错误的 :)
  • 如果你解释一下为什么它是正确的,我很乐意同意你的观点!

标签: python lxml


【解决方案1】:

我认为这是元素树 (ET) 的正确行为。原因在于 ET 表示文本节点的方式:只有作为元素子元素的 first 的文本节点由属性 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

【讨论】:

  • 这就是我要找的!然而,有点遗憾的是它的工作原理...... :)
  • 是的,我自己也时常为此苦苦挣扎。它使一些事情变得更容易,但有时它会增加字节数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2012-08-17
  • 2013-01-09
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
相关资源
最近更新 更多