到目前为止,我正在处理这样的
HTML文件
<div name="node"></div> <div></div> <div name="node"></div> <div></div> <div name="node"></div> <div></div>
我想选择每个“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;
但我只是得到一个错误
Fatal error: Call to undefined method DOMElement::next_sibling()
谁能告诉我我的剧本有什么问题?
错误很明显:没有方法DOMElement :: next_sibling().阅读
documentation for
DOMElement
及其父类
DOMNode
.您正在考虑属性DOMNode :: nextSibling.
但是,nextSibling获取下一个节点,而不是下一个元素. (没有DOM方法或属性可以获取下一个元素.你需要继续使用nextSibling并检查nodeType,直到你点击另一个元素.)你的问题是你想要下一个节点,但我想你可能真的想要下一个元素(空< div>).这实际上很容易用XPath做,所以为什么不这样做呢?
要立即得到它:
$els = $xpath->query("//div[@name='node']/following-sibling::*[1]");
当你已经有一个< div name =“node”>时获得它:
$nextelement = $xpath->query("following-sibling::*[1]",$currentdiv);