【问题标题】:Xpath, php and how to skip specific node (and it's children)Xpath、php 以及如何跳过特定节点(及其子节点)
【发布时间】:2013-10-14 01:47:10
【问题描述】:

我最近才开始使用 XPath 工具。 目前我只是逐行解析一些页面并获取相关文本。

我想做的是在顶部排除div它是子元素

基本上我在看这个:

<html>
  <head> Foo </head>
  <body>

    <div id='header'>
      <ul id='menu'> <li> Bar </li> <li> FooBar </li> <li> BarFoo </li> </ul>
    </div>

    <table> <tr> <td>data</td><td>data</td> </tr> </table>

    <div>
      <p>Lorem Ipsum</p>
      <p>dolor sit amet</p>
    </div>

  </body>
</html>

除了更多的内容。

目前我循环遍历每个节点:

$dom = new DOMDocument;
$dom->loadHTMLFile('http://www.test.com/test.htm');

$xpath = new DOMXPath($dom);
$nodes = $xpath->query('/html/body//*');

foreach($nodes as $node) {
  echo $node->nodeValue;
}

我想忽略整个头节点。

有没有一种简单的方法来做到

【问题讨论】:

    标签: php html dom xpath


    【解决方案1】:

    这可行:

    /html/body//*[not(ancestor-or-self::div[@id="header"])]
    

    XPath 选择 body 元素下方的所有节点,除非它们是 id 属性值为“header”的 DIV 或该 div 本身的祖先。

    查看http://schlitt.info/opensource/blog/0704_xpath.html 获取 XPath 教程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多