如何使用 XPath 找到特定元素? [复制]

Posted

技术标签:

【中文标题】如何使用 XPath 找到特定元素? [复制]【英文标题】:How can I find a specific element with XPath? [duplicate] 【发布时间】:2014-03-23 06:24:18 【问题描述】:

如何使用 xpath 找到选项 1?

注意:id 是在每次构建后生成的。

我试过了,还是不行:

/li[@class='itemL' and contains(text(),'option1'])

输入 html sn-p

<div id="list-1721" class="x-list x-list-floating x-layer x-boundlist-default" ">
<div id="list-1721-listEl" class="x-list-list-ct" style="overflow: auto; height: auto;">
<ul>
<li class="x-list-item itemL" role="option">option1</li>
<li class="x-list-item itemL" role="option">option2</li>
</ul>
</div>

【问题讨论】:

【参考方案1】:

您尝试的 xpath 失败,因为 @class='itemL' 与类属性完全匹配。

您可以执行与文本类似的操作,并使用contains 作为类属性:

//li[contains(@class, 'itemL') and contains(text(), 'option1')]

请注意,这也将匹配类为“startitemL”、“itemLend”等的 li 元素。如果您需要防止这种情况发生,那么您将需要使用以下方法之一来检查整个单词。

在 xpath 1.0 中检查整个单词:

//li[contains(concat(' ', @class, ' '), ' itemL ') and contains(text(), 'option1')]

在 xpath 2.0 中检查整个单词:

//li[tokenize(@class,'\s+')='itemL' and contains(text(), 'option1')]

【讨论】:

【参考方案2】:

如果您使用的是 c#,您可以查看这个 linq-esq 库,以使用 lambda 表达式生成 xpath。

http://www.syntaxsuccess.com/viewarticle/how-to-create-xpath-using-linq

这个xpath可以用以下表达式表示:

      var xpath = CreateXpath.Where(e => e.TargetElementName == "li" 
                                   && e.TargetElementText.Contains("option1") 
                                   && e.Attribute("class").Contains("itemL"));

生成的 xpath://li[contains(@class,'itemL') and contains(text(),'option1')]

如果您愿意,也可以使用相等运算符使其更严格:

          var xpath = CreateXpath.Where(e => e.TargetElementName == "li" 
                                       && e.TargetElementText == "option1" 
                                       && e.Attribute("class").Text == "itemL");

Generated xpath: //li[@class='option1' and text()='itemL']

【讨论】:

以上是关于如何使用 XPath 找到特定元素? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在具有 xmlns 属性的 xml 中使用 xpath 获取特定的嵌套元素? [复制]

如何找到xpath表单网页

如何在WebElement中通过xpath查找子元素

在 SSIS 中,如何在 Foreach NodeList 枚举器中使用 XPATH 循环遍历特定元素内的 XML

如何在 Jsoup 中生成匹配特定元素的 XPath 查询?

如何在 java 中使用 selenium webdriver 查找特定的表元素?