XPath:排除包含特定单词的文本节点

3
我有一个XPath的问题。我正在尝试查找div的第一次迭代中的所有文本节点,但要排除其中带有关键词的节点。
一个简单的例子:
<div class="blabla">
  <p>I like bananas</p>
  <p>I also like apples</p>

<div class="blabla">
  <p>some text</p>

我希望获取第一个div“blabla”中的所有文本,但排除包含单词“香蕉”的段落。在这种情况下,我只想要“我也喜欢苹果”。段落数量和单词“香蕉”的位置是随机的。
以下是我尝试过的内容:
(//div[@class='blabla'])[1][not(contains(text(), 'bananas'))]

我不知道为什么这个不起作用。如果有人有想法,将不胜感激!


你想要从 div 中获取文本节点作为单个字符串,但不包括包含 "bananas"p,还是想要从每个 p 中获取文本节点列表,但不包括 "bananas"?如果需要特定版本的解决方案,请指定 XPath 版本。 - Andersson
(//div[@class='blabla'])[1]/*[not(contains(text(), 'bananas'))] - splash58
返回已翻译文本:(//div[@class='blabla'])[1]/*[not(contains(text(), '香蕉'))]/text() - splash58
1个回答

1
你在第三个谓语之前漏了对 p 子元素的引用。
//div[@class='blabla'][1]/p[not(contains(text(), 'bananas'))]

仅仅是两个字母/p的区别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接