XPATH条件排除

时间:2013-06-14 11:19:37

标签: xpath domxpath

我有一个html片段,如下所示;

<div class="sideBar">
 <ul>
   <li class="test testlist">
    <div>test 1</div>
    <ul>
      <li class="test testlist"><div>sub test1</div></li>
      <li class="test testlist"><div>sub test2</div></li>
   </ul>
  </li>
  <li class="test testlist"><div>test 2</div></li>
 </ul>
</div>

我需要获取包含文本“test 2”的第二个节点列表,但是当我尝试以下内容时;

//div[contains(@class, 'sideBar')]//li[@class=\"test testlist\"])[2]//div

返回节点;

 <li class="test testlist"><div>sub test2</div></li>

请问如何返回节点;

 <li class="test testlist"><div>test 2</div></li>

非常感谢,

下进行。

1 个答案:

答案 0 :(得分:0)

我不确定使用文本“test 2”获取节点应该是什么规则。 首先,你的xpath有一个错误的括号(复制过去的错误):

//div[contains(@class, 'sideBar')]//li[@class=\"test testlist\"] -->)<-- [2]//div

有两种解释:

//div[contains(@class, 'sideBar')]//li[@class='test testlist'][2]//div"

这将选择所有li(带有类测试testlis)后代到div的第二个位置到父级 或者:

(//div[contains(@class, 'sideBar')]//li[@class='test testlist'])[2]//div

这将选择发现的三个的第二个li(带有类测试testlis)。

两者都不是你想拥有的。因此,试试:

(//div[contains(@class, 'sideBar')]//li[@class='test testlist'][2])[2]//div

第二个位置中的第二个。
或者最好(在我看来):

//div[contains(@class, 'sideBar')]/ul/li[@class='test testlist'][2]//div"

div中第一个直接孩子ul的第二个li。