lxmlxpath如何从nod获取连接文本

2024-09-25 12:32:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个像

<a class="someclass">
Wie
<em>Messi</em>
einen kleinen Jungen stehen lässt
</a>

如何构造XPath来获取["Wie Messi einen kleinen Jungen stehen lässt"]而不是{}?在

我用的是pythonlxml.html函数与XPath。在

尝试过的组合

  1. //a/node()/text()
  2. //a/descendant::*/text()
  3. //a/text()

但没用。有什么解决办法吗?在

我在考虑另一种方法,在这种方法中,我以某种方式获得<a>元素的“内部html”(在上面的例子中将是"Wie <em>Messi</em> einen kleinen Jungen stehen lässt"),并从html中删除<em>标记。在

仍在尝试如何获取innerhtml(Javascript,有人吗?)从XPath。在


Tags: 方法texthtmlxpathclassemsstsomeclass
2条回答

XPath是一种选择语言,因此它可以选择节点。如果输入中有单独的节点,那么您将得到一个单独节点的列表作为选择结果。在

您将需要宿主语言(在本例中是Python)的帮助来完成超出该范围的操作(例如,将文本节点合并为单个字符串)。在

您需要找到所有<a>元素并连接它们各自的文本子体。这很容易做到:

from lxml import etree

doc = etree.parse("path/to/file")

for a in doc.xpath("//a"):
    print " ".join([t.strip() for t in a.itertext()])

印刷品

^{pr2}$

正如paul在下面的评论中正确指出的那样,您可以使用XPath的normalize-space(),整个过程变得更加简单。在

for a in doc.xpath("//a"):
    print a.xpath("normalize-space()")

如果您得到<a>节点的字符串值,而不是使用text(),那么您将得到所有子节点的字符串值的串联,而不是单个文本节点。在

试着简单地使用

//a

并在宿主语言中将节点作为字符串读入。在Python中,可以使用@Tomalak提到的DOM函数来获取字符串值。在lxml中,可以使用.text_content()

^{pr2}$

在XPath中,可以使用类型函数:

string(//a)

相关问题 更多 >