首页 > 解决方案 > Xpath:在包含文本的元素之后获取文本

问题描述

我正在寻找一种方法来获取不在 HTML 元素内的文本:

<div class="col-sm-4">
  <strong>Handelnde Personen:</strong><br><br>
  <strong>Geschäftsführer</strong><br>
  Mr John Doe<br>
  Privatperson<br>
  .....<br>
  <br>

我想得到“Mr John Doe”。

我看到的唯一方法是寻找包含“Geschäftsführer”的强元素,然后寻找以下文本。

到目前为止我的想法:

//strong[包含(text(), 'Gesch')]/br/../text()

...我根本无法让它工作。

另外,字符串是否有“通配符”?我可以使用

*esch*ftsf*hr*

为“Geschäftsführer”?

我非常感谢您的帮助,谢谢!

标签: htmlxpath

解决方案


尝试

//strong[starts-with(., 'Gesch')]/following-sibling::text()[1]

至于通配符匹配,在 XPath 2.0 中,您使用正则表达式:

//strong[matches(., '.*esch.*ftsf.*hr.*')]

使用 XPath 3.0,您还可以使用 Unicode 排序算法

//strong[compare(., 'Geschäftsführer', 
  'http://www.w3.org/2013/collation/UCA?strength=primary') = 0]

(强度=主要忽略大小写和重音)

但是要在浏览器中获得比 XPath 1.0 更高级的东西,您需要部署 Saxon-JS。

1.0 的另一个选项是使用 translate() 删除大小写和变音符号:

//strong[translate(., 'ABCD..XYZÄÖÜäöüß', 'abcd..xyzaouaous') = 'geschaftsfuhrer']

请注意,在所有这些示例中,我都使用"."而不是"text()"获取元素的字符串值 - 这是推荐的做法。


推荐阅读