如何使用XPath包含()在这里?
我正在尝试学习xpath。 我查看了这里的其他contains()例子,但没有使用AND运算符。 我无法得到这个工作:
//ul[@class='featureList' and contains(li, 'Model')] 上:
 ... <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> ... 
	
 您只查看查询中的第一个li子,而不查找可能包含文本'Model' li子元素。 你需要的是如下的查询: 
 //ul[@class='featureList' and ./li[contains(.,'Model')]] 
 这个查询会给你带有一个包含文本'Model'一个或多个li子元素的featureList class的元素。 
我已经给杰夫·耶茨的解决scheme+1了。
这里有一个简单的解释,为什么你的方法不起作用。 这个:
// ul [@ class ='featureList'并包含(li,'Model')]
 遇到contains()函数(或XPath中的任何其他string函数)的限制。 
 第一个参数应该是一个string。 如果你给它一个节点列表(给它“ li ”这样做),一个string转换必须发生。 但是这个转换只对列表中的第一个节点完成。 
 在你的情况下,列表中的第一个节点是<li><b>Type:</b> Clip Fan</li> (转换为string:“ Type: Clip Fan ” 
// ul [@ class ='featureList'并包含(li,'Type')]
实际上会select一个节点!
  这是一个关于关于contains()在XPath中常见误解的老问题的新答案… 
 小结: contains()表示包含一个子串 , 不 包含一个节点 。 
详细说明
这个XPath经常被误解:
 //ul[contains(li, 'Model')] 
  错误的解释:select那些包含一个li元素和Model ul元素。 
这是错误的,因为
-   contains(x,y)期望x是一个string,和
- 
将多个元素转换为string的XPath规则是这样的 : 通过返回首先按照文档顺序的节点集中的节点的string值 ,将节点集转换为string。 如果节点集为空,则返回空string。 
  正确的解释:select那些第一个 li孩子有一个包含 Model子串的string值的 ul元素。 
例子
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> 
的XPath
- 
//ul[contains(li, 'Model')]selectoneul元素。注: twoul元素没有被选中,因为twoul的第一个li子元素的string值是Foo,它不包含Model子string。
- 
//ul[li[contains(.,'Model')]]selectone和twoul元素。注意:两个 ul元素都被选中,因为contains()被单独应用于每个li。 (因此,避免了棘手的多元素到string转换规则。)两个ul元素都有一个li子元素,其string值包含Model子元素 –li元素的位置不再重要。
也可以看看
- 在XPath中testingtext()节点与string值
 在这里粘贴我contains例子: 
 //table[contains(@class, "EC_result")]/tbody