我最近刚刚开始使用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;
}
我想忽略整个标头节点。
有一种简单的方法可以做吗?
答案 0 :(得分:2)
这样可行:
/html/body//*[not(ancestor-or-self::div[@id="header"])]
XPath选择body元素下面的所有节点,除非它们是id属性值为“header”或div本身的DIV的祖先。
检查http://schlitt.info/opensource/blog/0704_xpath.html以获取XPath教程。