我在PHP中遍历DOM时遇到以下错误
致命错误:调用未定义的方法DOMText :: getAttribute()
我正在做的是,我一个接一个地遍历DOM节点。但在某些情况下,我没有得到正确的DOM节点,我可以从中获得特定的属性。当我获得DOMText节点时, - > nodeType == 3总是(不是DOM节点, - > nodeType == 1),因此我无法获取返回的DOM节点的任何属性。
我使用PHP中的以下语法获取Next DOM Node
$node = $node->nextSibling;
在某些情况下,我还需要像以前一样获取Previous Nodes
$node = $node->previousSibling;
现在,我的问题是,我如何获得正确的DOM节点?
我试过以下功能
function GetNode($oNode)
{
while($oNode->nodeType != 1)
$oNode = $oNode->previousSibling;
return $oNode;
}
有检查条件(我使用过该节点),如
while($node && !empty($node) && $node->nodeType == 1 && !preg_match("/^Abc/",$node->getAttribute('class')))
{
//further code
$node = $node->nextSibling;
$node = GetNode($node);
}
但是现在出现问题是它进入无限循环,因为它总是返回nodeType == 1并且不会终止循环。
答案 0 :(得分:3)
Text节点是任何其他元素的dom元素。看来是因为xml中的标签之间存在纯文本(例如换行符char)。所以你应该只检查nodeType并跳过文本节点。
在你的代码中,你在“GetNode”函数中有一个错误:你应该使用$ oNode-> nextSibling而不是$ oNode-> previousSibling。
P.S。现代浏览器具有跳过文本节点的.nextElementSibling属性;)