XPath 匹配包含文本的所有节点

1 投票
2 回答
1242 浏览
提问于 2025-04-16 15:23

我想知道怎么递归地匹配所有包含文本的子节点。

如果我有一个这样的树结构:

table
 tr
  td
   "hello"
  td
   b
    "hi"
 tr
  td
   "salud"
  td
   em
    "bonjour"

我该如何用xpath匹配表格节点中的每一个字符串呢?是不是像这样 "//table/*/text()"?

2 个回答

0

下面这个怎么样?

from lxml import etree
from StringIO import StringIO

input = '''
<table>
 <tr>
  <td>hello</td>
  <td><b>hi</b></td>
 </tr>
 <tr>
  <td>salud</td>
  <td><em>bonjour</em></td>
 </tr>
</table>
'''

parser = etree.HTMLParser()
tree = etree.parse(StringIO(input), parser)

for p in tree.xpath("//table/tr/td//text()"):
    print p

... 这段代码的输出是:

hello
hi
salud
bonjour
3

你给的XPath表达式已经差不多正确了:

//table//text()

这个表达式会帮你找到文档中所有表格里的所有文本内容。

撰写回答