2016-01-04 103 views
4

在XPath我怎樣才能找到哪個數(取決於,0或1,在開始,Ç是2或3個)例如產品Ç在下面的列表:查找列表中的節點的數目(位置)

<ol> 
<li>a</li> 
<li>b</li> 
<li>c</li> 
<li>d</li> 
</ol> 
+0

http://stackoverflow.com/questions/226405/find-position-of-a-node-using-xpath – SIslam

回答

2

您可以使用XPathcount the preceding li siblings

count(//ol/li[. = 'c']/preceding-sibling::*) 

演示(使用lxml.etree):

>>> from lxml import etree as ET 
>>> data = """ 
... <ol> 
... <li>a</li> 
... <li>b</li> 
... <li>c</li> 
... <li>d</li> 
... </ol> 
... """ 
>>> tree = ET.fromstring(data) 
>>> value = "c" 
>>> int(tree.xpath("count(//ol/li[. = '%s']/preceding-sibling::li)" % value)) 
2 
+0

可能li [@ id =「something」]與[。 ='%s']?謝謝 – abruski

+0

@abruski當然,您可以使用文本,屬性或任何其他方法來過濾所需的元素 - 關鍵技巧是使用'preceding-sibling :: li'來計算前面的元素。 – alecxe