php xpath查找具有特定属性的后代的节点

时间:2013-07-23 19:01:05

标签: php xpath

我有一个多级< ul>< li>菜单结构。我正在尝试使用“current-menu-line”类获得具有后代LI的顶级LI。

我的HTML

<ul id="menu1" class="nav">
  <li class="menu-item dorment-menu-item"><a href="http://localhost/index.html">welcome</a></li>
  <li class="menu-item dorment-menu-item"><a href="http://localhost/evidence.html">evidence</a></li>
  <li class="menu-item dorment-menu-item"><a href="http://localhost/network.html">network</a></li>
  <li class="menu-item dorment-menu-item"><a href="http://localhost/multi-page-pc-22.html">Multi page</a>
    <ul class="subnav">
      <li class="menu-item current-menu-line"><a href="http://localhost/new-page-1-pg-47.html">page 1</a></li>
    </ul>
  </li>
</ul>

我尝试过多次xPath查询,以获得具有后代但没有成功的最顶层<li>

$query = '//li[contains(@class, "current-menu-line")]'; // this one works ... makes sure LI.current-menu-line can be found
$query = '/ul/li[li[contains(@class, "current-menu-line")]]'; // returns 0 rows
$query = '/ul/li[//li[contains(@class, "current-menu-line")]]'; // returns 0 rows
$query = '/ul/li[descendant::li[contains(@class, "current-menu-line")]]'; // returns 0 rows

//在检查“使用Xpath选择具有某些后代的元素”后添加

$query = '/ul/li[.//li[contains(@class, "current-menu-line")]]' ; // returns 0 nodes
$query = "/ul/li[descendant::li[@class, 'current-menu-line')]]"; // invalid query

有人能告诉我正确的查询以获得正确的LI吗?

干杯

1 个答案:

答案 0 :(得分:1)

此选择应符合您的描述:

 /ul/li[.//li[contains(@class, 'current-menu-line')]]

我看到你已经尝试了这个并且它没有为你返回任何节点,但我怀疑你提供给你使用的实际XML的XML剪辑可能有所不同。我使用an online XPath evaluator验证了XPath,即使嵌套结构超过以下两级,它也会返回正确的结果。

相关问题