2016-06-13 104 views
0

如果我使用以下XPath:XPATH选择找到几个要素,而不是一个(兄弟与以下,兄弟姐妹)

//*[contains(@class, 'some-label') and contains(., 'MT:Week')] 

这让我完全按预期一个元素(<span>)。到现在为止还挺好。

我要的是得到<select>就在旁边,但这样做:

//*[contains(@class, 'some-label') and contains(., 'MT:Week')]/following::select 

它已经选择 <select>元素。如何在不使用名称属性(!)的情况下仅选择一个

的HTML:

<div> 
    <label> 
    <span class="some-label">MT:Month</span> 
    <select name="month" id="someID"> 
     <option selected="selected" value="12">March 2015</option> 
    </select> 
    </label> 
</div> 

<div> 
    <label> 
    <span class="some-label">MT:Week</span> 
<!-- want to select just the below one --> 
    <select class="width-50px" name="monthWeek" id="someOtherID"> 
     <option selected="selected" value="">All</option> 
     <option value="CalendarWeek{year=2015, week=9}">9</option> 
     <option value="CalendarWeek{year=2015, week=10}">10</option> 

    </select> 
    </label> 
</div> 


<div> 
    <label> 
    <span class="some-label">MT:Type</span> 
    <select name="type" id="anotherID"> 
     <option selected="selected" value="">All</option> 
     <option value="someValue">Value 1</option> 
     <option value="someValue2">Value 2</option> 

    </select> 
    </label> 
</div> 

回答

1

你可以使用[1],以获得第一:

//*[contains(@class, 'some-label') and contains(., 'MT:Week')]/following::select[1] 

但你可能只想同一个标签内的一个,所以用以下同胞

//*[contains(@class, 'some-label') and contains(., 'MT:Week')]/following-sibling::select 
+0

令人惊讶的是,我们写了相同的两个表达式, 5秒:) – splash58

+0

@BeniBela。谢谢,它是手势。现在学会了兄弟姐妹和兄弟姐妹之间的区别。带有示例的良好源代码在这里 - http://www.zvon.org/xxl/XPathTutorial/Output/example15.html和http://www.zvon.org/xxl/XPathTutorial/Output/example17.html – Andrejs

+0

@ splash58这似乎几乎每次都发生 – BeniBela