到目前为止,我正在处理这样的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)
我不知道php,但这xpath让他们:
//div[@name="node"]/following-sibling::*[1]
Run Code Online (Sandbox Code Playgroud)