html - 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”?
我非常感谢您的帮助,谢谢!
解决方案
尝试
//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()"
获取元素的字符串值 - 这是推荐的做法。
推荐阅读
- html - 如何使用数组的索引值并将其传递给 HTML 模式,这样我就可以在那里显示数据,而无需使用 Angular 7 中的循环
- angular - 将 Angular 项目 ARM 部署到 Azure Web 应用程序
- c# - 如何在 TextMode="DateTimeLocal" 中填充 asp:textbox
- python - Python if 和 else
- ram - 什么是内部存储器?我在哪里可以找到它?
- android - 如何使用 Firebase ML Kit 从 PDF 文件中识别文本?
- c# - System.IO.File.AppendAllText 在追加之前是否读取了完整的目标文件?
- apache-flink - Flink 翻滚窗口标注
- python - python中循环链表中的出队
- java - 使用自己的数据库配置 Spring Cloud 数据流任务