我正在使用此 XPath 查询来选择 Xhtml 文档中没有输入后代的元素:
//*[not(descendant-or-self::input | descendant-or-self::textarea | descendant-or-self::select | ancestor::select)]
使用以下示例 XHtml 文档:
<html>
<head>
<title>Title</title>
</head>
<body>
<div id="one">
<input type="text" />
</div>
<div id="two">
<textarea></textarea>
</div>
<div id="three">
<div id="four">
Text
</div>
</div>
<div id="five">
<select>
<option>One</option>
<option>Two</option>
</select>
</div>
<div id="six">
<input type="text" />
</div>
<div id="seven">
<div id="eight"></div>
</div>
</body>
</html>
...还有这个 PHP 代码:
// Populate $html and $query with above
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadXML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query($query);
foreach($nodes as $node)
{
echo $node->tagName;
if($node->hasAttribute('id'))
echo '#' . $node->getAttribute('id');
echo ' ';
}
我明白了:head title div#three div#four div#seven div#eight
但我想要这个:head div#three div#seven
我将获取 XPath 查询的结果并从 DOMDocument 中删除元素。title div#four div#eight
是 的孩子head div#three div#seven
,它们已经在结果中。
请记住,此查询将用于任何 XHtml 文档,我将如何更改我的 XPath 1.0 查询以获得所需的结果?