웹모아
웹모아[가입] 로그인 / 회원가입   검색     


  
토막소스
 

XML<-->Array 클래스
2008-08-01 03:35:04 댓글:(4)   조회:2005
 

xml을 array로 -------------------------------------------

/**
 * @author ArtWorker
 * @copyright 20071216
 * 해당 Text값은 배열의 value라는 키 값으로 전환.
 */
class ToArray extends DOMDocument
{
    function ToArray($n)
    {
        $xml_array = array();
        foreach($n->childNodes as $nc){
                
            if($nc->hasChildNodes())
            {
                $xml_array[$nc->nodeName] = $this->ToArray($nc);
                
                if($nc->hasAttributes()){
                        $attributes = $nc->attributes;
                        foreach ($attributes as $index=>$attr){
                            $xml_array[$nc->nodeName][$attr->name] = $attr->value;
                        }
                }
            }
            else
            {
                $xml_array['value'] = $nc->nodeValue;
            }
        }
        return $xml_array;
    }
}



array를 xml로 -------------------------------------------


/**
 * @author ArtWorker
 * @copyright 20071216 ~ 23일 완성
 * XML파서에 대한 이해가 무지하다 보니 오래 걸렸다.
 * 특히 속성을 처리 하는 부분에서 많은 시간을 까먹었다.
 */

class ToXML extends DOMDocument {
       
        public $root;
        public $sub_root;
        public $sub_obj;
        public $sub_att;
        public $keys;
       
        /**
        * ToXML
        * @param array $array
        */

        function ToXML($array)
        {
            foreach($array as $key=>$val)
            {
                /**
                * 루트 노드를 생성
                * 현 foreach는 한번만 실행. 나머지는 release_node에서 재귀호출 한다.
                */
                $this->root=$this->createElement($key);
                $this->appendChild($this->root);
                $this->sub_root=$key;
                $this->keys[$this->sub_root] = $this->root;
                $this->release_node($val);
            }


        }
        
        function release_node($array)
        {
            foreach($array as $key=>$val)
            {
                if(is_array($val))
                {
                    /**
                    * 배열일 경우 현재위치 노드를 sub_root에 저장하고 엘리먼트를 생성한다.
                    * 재귀호출 하여 단계별로 하위 엘리먼트를 생성한다.
                    */
                    #배열일 경우
                    $root=$this->sub_root;
                    $this->sub_obj[$key] = $this->createElement($key);
                    $this->keys[$this->sub_root]->appendChild($this->sub_obj[$key]);
                    $this->sub_root = $key;
                    $this->keys[$this->sub_root]=$this->sub_obj[$key];
                    $this->release_node($val);
                    $this->sub_root = $root;
                }
                else
                {
                    /**
                    * 배열이 아닐 경우는 value(node값) 이거나 속성으로 판단한다.
                    * 이 밖에 다른 구문이 추가 되는 경우(isobject() 등),
                    * elseif로 추가 작성 한다.
                    * php.net의 코멘트에서 많은 영감을 받았다.
                    */
                    if($key == 'value')
                    {
                        #노드값일 경우
                        $this->keys[$this->sub_root]->appendChild($this->createTextNode($val));
                    }
                    else
                    {
                        /**
                        * 속성 처리 부분에서 참 많은 고민을 했고 많은 시간을 허비 했다.
                        * 재퀴 호출이기 때문에 root엘리먼트가 계속 바뀌므로,
                        * 기존의 엘리먼트를 유지하는 방법을 찾아 많은 시간을 보냈다.
                        */
                        #속성일 경우
                        $this->sub_att[$key]=$this->createAttribute($key);
                        $this->sub_att[$key]->value = $val;
                        $this->keys[$this->sub_root]->appendChild($this->sub_att[$key]);

                    }
                }
            }
        }

        /**
        * get the finished xml
        *
        * @return string
        */
}


/**
*    DOMDocument를 직접 상속 받으므로 기존 자원 사용 가능.    
*
*     #ToArray 사용법
*         $dom = new ToArray('1.0','utf-8');
*         $dom->load('sample.xml');
*         $array=$dom->ToArray($dom);
*
*     #ToXML 사용법
*         $dom = new ToXML('1.0','utf-8');
*         $dom->ToXML($array);
*         $dom->save('sample2.xml');
*/
. 


[이전글]  웹페이지의 문자열 가져오기 소스
[다음글]  str_replace() 한글치환 보강


 
댓글쓰기는 회원(로그인 하신분) 이상 가능합니다.


 댓글 (4)


  •     2008-08-01 03:51:59
    function object2array($object)
    {
    $return = NULL;

    if(is_array($object))
    {
    foreach($object as $key => $value)
    $return[$key] = object2array($value);
    }
    else
    {
    $var = get_object_vars($object);

    if($var)
    {
    foreach($var as $key => $value)
    $return[$key] = ($key && !$value) ? NULL : object2array($value);
    }
    else return $object;
    }

    return $return;
    }
    ?>  

  •     2008-08-01 03:50:37
    $xml = '



    <![CDATA[Tom & Jerry]]>


    ';

    $xml = simplexml_load_string($xml);

    // echo does the casting for you
    echo $xml->channel->item->title;

    // but vardump (or print_r) not!
    var_dump($xml->channel->item->title);

    // so cast the SimpleXML Element to 'string' solve this issue
    var_dump((string) $xml->channel->item->title);
    ?>

    Above will output:

    Tom & Jerry

    object(SimpleXMLElement)#4 (0) {}

    string(11) "Tom & Jerry"  

  •     2008-08-01 03:46:55
    검색을 해보니. php 5 이상에서 되고;;
    phpinfo 에서 xml관련 설치하고;;
    content type=text/html/xml 로 해주고
    관련 변수에서

    $aaa=simplexml_load_file("a.xml");
    $aaa=simplexml_load_file(http://www.xxx.com/a.jsp);
    이런식으로 해주면 aaa에 저장이 되는거 같은데;ㅣ;

    그리고 xml에서 내용이....

    새로나온책1

    15000

    와 같다면

    foreach ($result->item as $item){
    echo $item->title;
    echo $item->description;
    echo $item->price;
    }
    이런식으로 각각의 항목을 출력  

  •     2008-08-01 03:41:36
    $xmlDoc = simplexml_load_file($xmlResponse);
    이렇게 해서 simplxml 오브젝을 만든후에
    $titleName = $xmlDoc->item->title;
    이런식으로 하면 어쩌구 같은 밸류를 뽑아올수 있습니다.  
  • ...
  
토막소스
페이지: 1 / 13   

 php에서 UTF-8, EUC-KR 인코딩 변경
열람:80   2015.02.28


 PHP- 파일 다운로드시 속도 제한하기
열람:82   2014.01.04


 이미지 사이즈 비율대로 축소
열람:1673   2013.12.10


 PHP- 파일 다운로드시 속도 제한하기
열람:3390   2013.03.23


   파일 다운로드 속도 제한
열람:3187   2013.03.23


 ffmpeg 설치 후 php 업로드 간단 테스트
열람:3669   2012.07.11


 새청없이 주소검색
열람:2815   2010.01.19


 EUC-KR<=>UTF-8 상호변환 하기
열람:2813   2008.09.07


 키를 이용한 암호화/복호화 함수입니다.
열람:3167   2008.09.05


 간단한 암호화/복호화 함수
열람:2586   2008.09.05



[1]  [2]  [3]  [4]  [5]  

복수단어 검색은 공백(space)로 구분해 주세요.




 
최근 글 [손님]
 
인기 글 [손님]
[깊은연못] KMFM - 24시간 연주곡