DOM방식 XML 파싱 클래스 (cband-status xml 파싱 예제) PHP



출처 : http://ytgoon.wo.tc/1


PHPSCHOOL 에서 구한 클래스 음~ XML 받아 오는 정보를 배열 형태로 처리하여 뿌려주는 듯!~ 유용함!~

아래 원본 소스를 참고 하길 바라며~ 나는 아파치2 서버에 트래픽 모듈을 올려 XML 정보를 파싱하여

처리 하였다~ 내가 작성한 예저 소스도 같이 올림!~

원본소스 :

<? 
    class xml_load extends DOMDocument{ 
        function xml_read($xml_file){ 
            $this->preserveWhiteSpace = false; 
            $this->load($xml_file); 
            return $this->xml_array($this); 
        }

        function xml_array($dom){ 
            $date= array(); 
            foreach($dom->childNodes as $nc){ 
                //해당 노드에 속성 있면 첨부할것. 
                if($nc->hasAttributes()){ 
                    $res['$nc->nodeName.@attributes']= array(); 
                    $attributes = $nc->attributes; 
                    foreach ($attributes as $index=>$attr) { 
                        $res['$nc->nodeName.@attributes'][$attr->name] = $attr->value; 
                    } 
                    $date = $res; 
                }

                //자식 노드 추가 
                if($nc->hasChildNodes()){ 
                    //################// 
                    //이름이 똑같은 경우에는 숫자로 배분할것. 
                    //현재 노드위치랑 다음 노드에 이름이 같은 경우 숫자로 배분. 
                    if((($nc->nodeName) == ($nc->nextSibling->nodeName)) && ($dom->childNodes->length > 1)){ 
                        $date[$nc->nodeName][] = $this->xml_array($nc); 
                    } 
                    //전에 노드랑 현제 노드랑 똑같은 경우 숫자로 배분. 
                    elseif(($nc->previousSibling->nodeName)== ($nc->nodeName) && 
($dom->childNodes-length > 1)){ 
                        $date[$nc->nodeName][] = $this->xml_array($nc); 
                    } 
                    //################// 
                    //혼자만 딸랑 있을 경우. 
                    else{ 
                        $date[$nc->nodeName] = $this->xml_array($nc); 
                    } 
                } 
                //데이터 넣기. 
                else{ 
                         $date=$nc->nodeValue; 
                }

            } 
            return $date; 
        } 
    }

//사용법.. 
$domdoc = new xml_load; 
$date = $domdoc->xml_read("xml 파일 위취");
echo"<pre>"; 
print_r($date);
?>


접기


아파치2 트래픽 모듈 XML 정보 파싱 :


<style type="text/css">
@import url("white.css");
</style>
<? 
    class xml_load extends DOMDocument{ 
        function xml_read($xml_file){ 
            $this->preserveWhiteSpace = false; 
            $this->load($xml_file); 
            return $this->xml_array($this); 
        } 

        function xml_array($dom){ 
            $date= array(); 
            foreach($dom->childNodes as $nc){ 
                //해당 노드에 속성 있면 첨부할것. 
                if($nc->hasAttributes()){ 
                    $res['$nc->nodeName.@attributes']= array(); 
                    $attributes = $nc->attributes; 
                    foreach ($attributes as $index=>$attr) { 
                        $res['$nc->nodeName.@attributes'][$attr->name] = $attr->value; 
                    } 
                    $date = $res; 
                } 

                //자식 노드 추가 
                if($nc->hasChildNodes()){ 
                    //################// 
                    //이름이 똑같은 경우에는 숫자로 배분할것. 
                    //현재 노드위치랑 다음 노드에 이름이 같은 경우 숫자로 배분. 
                    if((($nc->nodeName) == ($nc->nextSibling->nodeName)) && ($dom->childNodes->length > 1)){ 
                        $date[$nc->nodeName][] = $this->xml_array($nc); 
                    } 
                    //전에 노드랑 현제 노드랑 똑같은 경우 숫자로 배분. 
                    elseif(($nc->previousSibling->nodeName)== ($nc->nodeName) && ($dom->childNodes->length > 1)){ 
                        $date[$nc->nodeName][] = $this->xml_array($nc); 
                    } 
                    //################// 
                    //혼자만 딸랑 있을 경우. 
                    else{ 
                        $date[$nc->nodeName] = $this->xml_array($nc); 
                    } 
                } 
                //데이터 넣기. 
                else{ 
                         $date=$nc->nodeValue; 
                } 

            } 
            return $date; 
        } 
    } 

//사용법.. 
$domdoc = new xml_load; 
$date = $domdoc->xml_read("http://noirzo.iptime.org/cband-status-me/?xml");//xml 파일.. 적을것.. 
$total = $date[mod_cband][Virtualhosts][yt][limits][total];
$traffic = $date[mod_cband][Virtualhosts][yt][usages][total];
?>
<div class="HG_trafficViewer">
 <h2 class="title"><span>트래픽 사용량</span></h2>
  <div class="description">Traffic = <?php echo round(($traffic/$total)*100,0); ?>% (<?php echo round($traffic/1000,0); ?> MIB / <?php echo round($total/1000/1000,0); ?> GIB)</div>
  <div class="graph">
  <div class="used" style="width:<?php echo round(($traffic/$total)*100,0); ?>%;"></div>
  <div class="rest" style="width:<?php echo 100 - round(($traffic/$total)*100,0); ?>%;"></div>
  <div class="clear"></div>
</div>

덧글

댓글 입력 영역