当前位置: 首页 > 知识库问答 >
问题:

使用XPath,如何在没有前面的文本的情况下在标记处获得精确的匹配?

米浩穰
2023-03-14
<div id="dropdown-item" role="option">
<span class="select2-match">Steak</span>
 - Delicious Salmon Steak
</div>

第二个项包含xpath表达式应该忽略的项,因为它在下拉项div中的span节点上方包含一个文本。

<div id="dropdown-item" role="option">
Double
<span class="select2-match">Steak</span>
 - Monster Fillet Steak
</div>

我尝试了很多XPath表达式,我开始认为只有使用XPath我才能选择我想要的项。我知道,如果我在编程中连接两个或多个XPaths(例如C#或Java),并用连字符给出一个子字符串,最后找到我需要的索引,我将能够找到所需的节点,但考虑到我将处理的信息量,它不可能是执行的。我们的想法是只使用xpath,也许使用Regex...有什么建议吗?

共有1个答案

松刚豪
2023-03-14

这是一种可能的XPath(为了可读性而格式化):

//div[@id='dropdown-item']
/span[.='Steak']
     [not(
            preceding-sibling::text()[normalize-space()]
       )
     ]

简要说明:

  • //div[@id='dropdown-item']:查找HTML文档中所有div元素,其id属性值等于“dropdown-item”
  • /span[.='steak']:从每个div中查找子元素span,其内部文本完全等于“steak”...
  • [not(Previon-sibling::text()[normalize-space()])]:...并且previon-sibling文本节点不为空。这将匹配span在同级文本前仅有空白,或在同级文本前根本没有空白。
 类似资料:
  • 问题内容: 我有一个带有特殊重音的CSV文件,并通过选择UTF-8编码将其保存在记事本中。当我使用Java读取文件时,它也会读取BOM表字符。 因此,我想以UTF-8格式保存此文件,而不必最初在记事本中附加BOM。 否则,Java中是否有内置类可以消除读取文件内容时开头出现的BOM字符? 问题答案: 使用Notepad -免费且比Notepad好得多。使用Enconding > 在没有BOM的UT

  • 有没有办法在Spring MVC中获取当前会话,但不是通过请求。通常,我们所做的是在操作/控制器类方法中获取请求。从这个请求中,我们逐个请求获得会话。getSession()。但是,有没有办法在没有此请求对象的情况下获取此会话? 我的动机是,在一个实用程序类中,我需要访问会话中设置的值,而这个实用程序类方法是从控制器类的50多个方法中访问的。如果我必须从请求中获得会话,那么我需要更改所有这50个位

  • 我知道我可以获得包名并从完整的类名中去掉相应数量的字符,但我猜已经有人这么做了?

  • 我有以下html片段: 我已经用以下XPath找到了该元素: 谢谢,里亚斯

  • 所以我制作了一个脚本,读取一堆文本文件(每首歌一个)作为歌词。它的工作原理是你输入一个歌词短语,然后脚本扫描所有可用文件中的歌词,并告诉你歌曲的名称。问题是斜杠不起作用。我更改了“/”和“\”之间的斜杠,但遇到了错误。 当我使用正斜杠时,我看到以下内容: “OSError:[Errno 22]无效参数:'C:/Users/[My Name]/Desktop/MusicLyricSearch/All

  • 我正在玩grpc 有人成功使用进行生产吗?我们需要包括特使在内的所有依赖项吗?