将XML数据转换为PHP数组

时间:2011-12-05 09:23:35

标签: xml arrays simplexml

我有这个XML文件:http://www.basket.ba/ksbih/xml/200_07.xml

我已经使用了所有主要的函数和类来转换XML-to-Array,但似乎无法使它在属性上运行。

当“print_r / var_dump-ing”时,输出数据中缺少一些元素。

首先,我认为文件中存在语法错误,但事实并非如此。

我需要一个超级dooper xml2array转换。有一件事可能有用:

如果有一个超级dooper simplexml2array转换脚本/类/函数,这可能会有所帮助,因为我将以这种方式减少当前代码,

1 个答案:

答案 0 :(得分:1)

为什么不在互联网上使用任何课程?

<?php
class xml2array {

    function xml2array($xml) {
        if (is_string($xml)) {
            $this->dom = new DOMDocument;
            $this->dom->loadXml($xml);
        }

        return false;
    }

    function _process($node) { 
        $occurance = array();

        foreach($node->childNodes as $child) {
            $occurance[$child->nodeName]++;
        }

        if($node->nodeType == XML_TEXT_NODE) { 
            $result = html_entity_decode(htmlentities($node->nodeValue, ENT_COMPAT, 'UTF-8'), 
                                     ENT_COMPAT,'ISO-8859-15');
        } 
        else {
            if($node->hasChildNodes()){
                $children = $node->childNodes;

                for($i=0; $i<$children->length; $i++) {
                    $child = $children->item($i);

                    if($child->nodeName != '#text') {
                        if($occurance[$child->nodeName] > 1) {
                            $result[$child->nodeName][] = $this->_process($child);
                        }
                        else {
                            $result[$child->nodeName] = $this->_process($child);
                        }
                    }
                    else if ($child->nodeName == '#text') {
                        $text = $this->_process($child);

                        if (trim($text) != '') {
                            $result[$child->nodeName] = $this->_process($child);
                        }
                    }
                }
            } 

            if($node->hasAttributes()) { 
                $attributes = $node->attributes;

                if(!is_null($attributes)) {
                    foreach ($attributes as $key => $attr) {
                        $result["@".$attr->name] = $attr->value;
                    }
                }
            }
        }

        return $result;
    }

    function getResult() {
        return $this->_process($this->dom);
    }
}