XPath 匹配每个包含文本的节点

发布于 2024-10-31 10:48:38 字数 217 浏览 7 评论 0原文

如何递归匹配包含文本的所有子节点。

如果我有一棵树,

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

如何将表节点中的每个字符串与 xpath 相匹配? 像“//table/*/text()”之类的东西?

How do I match all child nodes containing text recursively.

If I have a tree like

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

How do I match every single string within the table node with xpath?
Something like "//table/*/text()"?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一笔一画续写前缘 2024-11-07 10:48:38

您给出的 XPath 表达式几乎已经正确:

//table//text()

将获取文档中所有表格内的所有文本节点。

The XPath expression you gave was almost correct already:

//table//text()

will get you all text nodes within all tables in the document.

安稳善良 2024-11-07 10:48:38

下面的怎么样?

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

How about the following?

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

... which gives the output:

hello
hi
salud
bonjour
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文