我正在尝试学习xpath.我查看了这里的其他contains()示例,但没有使用AND运算符.我不能让这个工作:
//ul[@class='featureList' and contains(li, 'Model')]
Run Code Online (Sandbox Code Playgroud)
上:
...
<ul class="featureList">
<li><b>Type:</b> Clip Fan</li><li><b>Feature:</b> Air Moved: 65 ft.
Amps: 1.1
Clip: Grips any surface up to 1.63"
Plug: 3 prong grounded plug on heavy duty model
Usage: Garage, Workshop, Dorm, Work-out room, Deck, Office & more.</li><li><b>Speed Setting:</b> 2 speeds</li><li><b>Color:</b> Black</li><li><b>Power Consumption:</b> 62 W</li><li><b>Height:</b> 14.5"</li><li><b>Width:</b> Grill Diameter: 9.5"</li><li><b>Length:</b> 11.5"</li>
<li><b>Model #: </b>CR1-0081-06</li>
<li><b>Item #: </b>N82E16896817007</li>
<li><b>Return Policy: </b></li>
</ul>
...
Run Code Online (Sandbox Code Playgroud)
Jef*_*tes 193
您只查看li
查询中的第一个子项,而不是查找li
可能包含该文本的任何子元素'Model'
.您需要的是如下查询:
//ul[@class='featureList' and ./li[contains(.,'Model')]]
Run Code Online (Sandbox Code Playgroud)
此查询将为您class
提供featureList
包含一个或多个li
包含文本的子项的元素'Model'
.
Tom*_*lak 57
我已经把我的+1给了Jeff Yates的解决方案.
以下是您的方法不起作用的快速解释.这个:
//ul[@class='featureList' and contains(li, 'Model')]
遇到contains()
函数的限制(或者XPath中的任何其他字符串函数).
第一个参数应该是一个字符串.如果你给它一个节点列表(给它" li
"这样做),就必须转换为字符串.但是,此转换仅针对列表中的第一个节点完成.
在您的情况下,列表中的第一个节点<li><b>Type:</b> Clip Fan</li>
(转换为字符串:" Type: Clip Fan
"),这意味着:
//ul[@class='featureList' and contains(li, 'Type')]
实际上会选择一个节点!
这是一个关于XPath中常见误解的旧问题的新答案contains()
......
摘要:contains()
表示包含子字符串,不 包含节点.
这个XPath经常被误解:
//ul[contains(li, 'Model')]
Run Code Online (Sandbox Code Playgroud)
错误的解释:
选择那些ul
的元素包含的li
元素与Model
它.
这是错误的,因为
contains(x,y)
期望x
是一个字符串,和用于将多个元素转换为字符串的XPath规则如下:
正确的解释:选择那些ul
其元素第一 li
的孩子有一个字符串值,即包含一个Model
字符串.
XML
<r>
<ul id="one">
<li>Model A</li>
<li>Foo</li>
</ul>
<ul id="two">
<li>Foo</li>
<li>Model A</li>
</ul>
</r>
Run Code Online (Sandbox Code Playgroud)
的XPath
//ul[contains(li, 'Model')]
选择one
ul
元素.
注:在two
ul
没有选择元素,因为第一个字符串值li
的孩子two
ul
就是Foo
,它不包含Model
子.
//ul[li[contains(.,'Model')]]
选择one
和two
ul
元素.
注意:两个ul
元素都被选中,因为contains()
它们li
分别应用于每个元素.(因此,避免了棘手的多元素到字符串转换规则.)两个ul
元素都有一个li
子字符串,其字符串值包含Model
子字符串 - li
元素的位置不再重要.
归档时间: |
|
查看次数: |
448848 次 |
最近记录: |