본문 바로가기

TroubleShooting/PHP

PHP xml 파싱

728x90

euc-kr 이 포함된 xml 파일을 파싱할때 사용할 수 있는 코드


class xml2Array {
    var $arrOutput = array();
    var $resParser;
    var $strXmlData;

    function parse($strInputXML) {

        $this----->resParser = xml_parser_create("UTF-8");
        //$this->resParser = xml_parser_create ();
        //$this->resParser = xml_parser_create("ISO-8859-1");
        xml_set_object($this->resParser,$this);


        xml_set_element_handler($this->resParser, "tagOpen", "tagClosed");

        xml_set_character_data_handler($this->resParser, "tagData");

        //xml_parser_set_option($this->resParser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1");
        $strInputXML = iconv("UTF-8", "EUC-KR", $strInputXML);
        $this->strXmlData = xml_parse($this->resParser, $strInputXML);
        if(!$this->strXmlData) {
            die(sprintf("XML error: %s at line %d",
                        xml_error_string(xml_get_error_code($this->resParser)),
                        xml_get_current_line_number($this->resParser)));
        }

        xml_parser_free($this->resParser);

        return $this->arrOutput;
    }
    function tagOpen($parser, $name, $attrs) {
        $tag=array("name"=>$name,"attrs"=>$attrs);
        array_push($this->arrOutput,$tag);
    }

    function tagData($parser, $tagData) {
        if(trim($tagData)) {
            if(isset($this->arrOutput[count($this->arrOutput)-1]['tagData'])) {
                $tagData = iconv("UTF-8", "EUC-KR", $tagData);
                $this->arrOutput[count($this->arrOutput)-1]['tagData'] .= $tagData;
            }
            else {
                $tagData = iconv("UTF-8", "EUC-KR", $tagData);
                $this->arrOutput[count($this->arrOutput)-1]['tagData'] = $tagData;
            }
        }
    }


    function tagClosed($parser, $name) {
        $this->arrOutput[count($this->arrOutput)-2]['children'][] = $this->arrOutput[count($this->arrOutput)-1];
        array_pop($this->arrOutput);
    }
}

$pageurl = "./resultXML.jsp";
//$thecontents = file_get_contents($pageurl);
$buf = file_get_contents($pageurl);
$thecontents = iconv("EUC-KR", "UTF-8", $buf);

$objXML = new xml2Array();
$arrOutput = $objXML->parse($thecontents);
//print_r($arrOutput);

출처 : 

php.net

'TroubleShooting > PHP' 카테고리의 다른 글

log4php 를 이용한 로깅 in PHP  (0) 2017.10.26
php 날짜형 포맷  (0) 2013.02.26
그누보드 설치시 하얀화면 발생  (0) 2012.11.16
CentOS 5.6 에서 php 5.3 설치  (0) 2012.05.15
apm 설치  (0) 2011.11.14