如何使用 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 获取特定的嵌套元素? [复制]
在 SSIS 中,如何在 Foreach NodeList 枚举器中使用 XPATH 循环遍历特定元素内的 XML