Php 如何将dom节点转换为数组?
我有一个函数,它获取dom节点并从中创建一个数组。 但它只给出了页面的一部分,我认为是关于兄弟姐妹的,但没有找到如何修改它:Php 如何将dom节点转换为数组?,php,dom,Php,Dom,我有一个函数,它获取dom节点并从中创建一个数组。 但它只给出了页面的一部分,我认为是关于兄弟姐妹的,但没有找到如何修改它: function nodeToArray( $dom, $node) { if(!is_a( $dom, 'DOMDocument' ) || !is_a( $node, 'DOMNode' )) { return false; } $array = false; if( empty( trim( $node->lo
function nodeToArray( $dom, $node)
{
if(!is_a( $dom, 'DOMDocument' ) || !is_a( $node, 'DOMNode' )) {
return false;
}
$array = false;
if( empty( trim( $node->localName ))) {// Discard empty nodes
return false;
}
if( XML_TEXT_NODE == $node->nodeType ) {
return $node->nodeValue;
}
foreach ($node->attributes as $attr) {
$array['@'.$attr->localName] = $attr->nodeValue;
}
foreach ($node->childNodes as $childNode) {
if ( 1 == $childNode->childNodes->length && XML_TEXT_NODE == $childNode->firstChild->nodeType ) {
$array[$childNode->localName] = $childNode->nodeValue;
} else {
if( false !== ($a = nodeToArray( $dom, $childNode))) {
$array[$childNode->localName] = $a;
}
}
}
return $array;
}
$dom = new DOMDocument();
$dom->loadHTML($response);
$a=nodeToArray($dom,$dom->getElementsByTagName("body")->item(0));
print "<pre>";
print_r($a);
print "</pre>";
函数nodeToArray($dom,$node)
{
如果(!is_a($dom,'DOMDocument')| |!is_a($node,'DOMNode')){
返回false;
}
$array=false;
if(空(修剪($node->localName)){//放弃空节点
返回false;
}
if(XML\u TEXT\u NODE==$NODE->nodeType){
返回$node->nodeValue;
}
foreach($node->属性为$attr){
$array['@'.$attr->localName]=$attr->nodeValue;
}
foreach($node->childNodes作为$childNode){
如果(1=$childNode->childNodes->length&&XML\u TEXT\u NODE==$childNode->firstChild->nodeType){
$array[$childNode->localName]=$childNode->nodeValue;
}否则{
if(false!==($a=nodeToArray($dom,$childNode))){
$array[$childNode->localName]=$a;
}
}
}
返回$array;
}
$dom=新的DOMDocument();
$dom->loadHTML($response);
$a=nodeToArray($dom$dom->getElementsByTagName(“正文”)->item(0));
打印“”;
印刷费($a);
打印“”;
谢谢您能找出问题并向我们展示什么不适用于示例输入,而不是删除随机代码片段吗?childnodes循环将只保存遇到的任何特定节点的最后一个。如果您在其中有(比如)6个
标记,您将覆盖从节点1->5保存的内容,并且只在其中留下6个。