【问题标题】:XPath contains whole word onlyXPath 仅包含整个单词
【发布时间】:2020-07-28 05:14:32
【问题描述】:

我看到了the existing question with the same title,但这是一个不同的问题。

假设我想在class 中查找具有“conGraph”的元素。我试过了

//div[contains(@class,'conGraph')]

它正确地得到了

<div class='conGraph mr'>

但它也错误地得到了

<div class='conGraph_wrap'>

这根本不是同一个类。仅针对这种情况,我可以使用'conGraph ' 并摆脱它,但我想知道未来使用的通用解决方案。

简而言之,我想获取其类包含“word”的元素,例如“word”、“word word2”或“word3 word”等,但不包含“words”或“fake_word”或“sword”。这可能吗?

【问题讨论】:

  • 您能否说明链接的问题无法回答您的问题? (“我不是@#$@# 去查找如何用正则表达式匹配单词”很好,但解释有点弱)
  • @AlexeiLevenkov 链接的问题是只找到一个完整的匹配项。也就是说,只有“word”,而不是“word word2”或“word3 word”。
  • 这能回答你的问题吗? How to find the exact word using a regex in Java?
  • 假设您对match 没问题,重复应该做...您可能需要编辑问题以澄清是否可以接受。
  • @AlexeiLevenkov 在在线正则表达式测试站点上,\bword\b 有效,但 "//div[matches(@class,'\bconGraph\b')]" 导致 System.Xml.XPath.XPathException: 'Namespace Manager or XsltContext needed. This query has a prefix, variable, or user-defined function.'

标签: xpath


【解决方案1】:

一种选择可能是使用 4 个条件(确切的术语 + 3 个 contains 支持空格的函数):

对于第一个条件,您在属性内容中搜索确切的术语。对于第二个、第三个和第四个,您指定所有空格变体。

数据:

<div class='word'></div>
<div class='word word2'></div>
<div class='word word3'></div>
<div class='swords word'></div>
<div class='swords word words'></div>
<div class='words'></div>
<div class='fake_word'></div>
<div class='sword'></div>

XPath:

//div[@class="word" or contains(@class,"word ") or contains(@class," word") or contains(@class," word ")]

输出:

<div class='word'></div>
<div class='word word2'></div>
<div class='word word3'></div>
<div class='swords word'></div>
<div class='swords word words'></div>

【讨论】:

  • 似乎用 C# (HtmlAgilityPack),这是唯一的方法。我认为会有一个干净的解决方案,因为我认为很多人会想要搜索包含特定 CSS 类的元素,但显然,我是少数需要这个的少数群体之一。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多