请注意:这个问题是一个更完善的版本以前的问题.
我正在寻找一个XPath,它允许我在HTML文档中找到具有给定纯文本的元素.例如,假设我有以下HTML:
<html>
<head>...</head>
<body>
<someElement>This can be found</someElement>
<nested>
<someOtherElement>This can <em>not</em> be found most nested</someOtherElement>
</nested>
<yetAnotherElement>This can <em>not</em> be found</yetAnotherElement>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我需要通过文本搜索,并能够找到<someElement>
使用以下XPath:
//*[contains(text(), 'This can be found')]
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个类似的XPath,让我找到<someOtherElement>
并<yetAnotherElement>
使用纯文本"This can not be found"
.以下不起作用:
//*[contains(text(), 'This can not be found')]
Run Code Online (Sandbox Code Playgroud)
我知道这是因为嵌套em
元素"扰乱""无法找到这个"的文本流.是否可以通过XPath在某种程度上忽略上述类似或类似的嵌套?
Mic*_*ann 10
您可以使用
//*[contains(., 'This can not be found')]
[not(.//*[contains(., 'This can not be found')])]
Run Code Online (Sandbox Code Playgroud)
这个XPath由两部分组成:
//*[contains(., 'This can not be found')]
:运算符.
将上下文节点转换为其字符串表示形式.因此,此部分选择其字符串表示中包含"无法找到"的所有节点.在上面的例子中,这是<someOtherElement>
,<yetAnotherElement>
和: <body>
和<html>
.[not(.//*[contains(., 'This can not be found')])]
:这将删除具有子元素的节点,该子元素仍包含纯文本"无法找到".它删除了不需要的节点<body>
,<html>
在上面的示例中.您可以在这里尝试这些XPath .