在PHP DOM中选择所选节点的下一个节点?

Tei*_*eiv 7 php xpath dom

到目前为止,我正在处理这样的HTML文件

<div name="node"></div>
<div></div>
<div name="node"></div>
<div></div>
<div name="node"></div>
<div></div>
Run Code Online (Sandbox Code Playgroud)

我想选择每个"div"的下一个节点,其名称等于"node",我尝试:

$dom = new DOMdocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);

$els = $xpath->query("//div[@name='node']");

$j = 0;

foreach($els as $el)
{
    if($el->next_sibling()) $j++;
}

echo $j;
Run Code Online (Sandbox Code Playgroud)

但我只是得到一个错误

致命错误:调用未定义的方法DOMElement :: next_sibling()

有人能告诉我我的剧本有什么问题吗?

Fra*_*ila 17

错误很明显:没有方法DOMElement::next_sibling().阅读文档DOMElement及其父类DOMNode.你在想这个房产 DOMNode::nextSibling.

但是,nextSibling获取下一个节点,而不是下一个元素.(没有获取下一个元素的DOM方法或属性.你需要继续使用nextSibling和检查,nodeType直到你点击另一个元素.)你的问题说你想要下一个节点,但我想你可能真的想要下一个元素(空<div>) .这实际上很容易用XPath做,所以为什么不这样做呢?

要立即得到它:

$els = $xpath->query("//div[@name='node']/following-sibling::*[1]");
Run Code Online (Sandbox Code Playgroud)

当你已经拥有一个<div name="node">:

$nextelement = $xpath->query("following-sibling::*[1]", $currentdiv);
Run Code Online (Sandbox Code Playgroud)


小智 6

在DOM中没有名为next_sibling()的函数.您应该使用DOMNode中定义的属性nextSibling(http://www.php.net/manual/en/class.domnode.php).

foreach($els as $el)
{
    if($el->nextSibling) $j++;
}
Run Code Online (Sandbox Code Playgroud)


Bir*_*rei 5

我不知道php,但这xpath让他们:

//div[@name="node"]/following-sibling::*[1]
Run Code Online (Sandbox Code Playgroud)