728x90

PHP 에서 XML 문서로 데이터 출력을 하는 방법에 대해 알아보자.


XML 문서 만들기의 규칙

- 모든 XML 문서들은 정확한 형식을 갖추어야 한다.

- 모든 태그들은 쌍(시작태그, 종료태그)을 이루어야 한다.


PHP XML Parser 는 두가지 종류가 있다.

SimpleXML Parser 와 XML expat Parser이다.

XML expat Parser 는 event 기반 parser 이다. (http://www.w3schools.com/php/php_xml_parser_expat.asp)

XML expat Parser 는 XML 파일 데이터가 많은 경우에 효과적이다.

XML Expat Parser functions 의 구성요소는 3개의 이벤트로 구성되어 있다고 볼 수 있다.

- Start element: from
- Start CDATA section, value: Jani
- Close element: from


<?php

// 1. DB 접속 경로 지정하여 DB를 읽어들인다.
// 2. 읽어들일 XML 파일의 경로를 지정한다. $readFile
// 3. 읽어들일 파일이 XML 파일인지 여부를 검사한다.
// 4. 초기 변수를 선언한다.
// 5. XML parser 를 생성하고 읽어들인 XML 파일을 파싱처리하여 DB에 저장한다.
$parser=xml_parser_create(); // XML parser 생성

// element handler 등록, start/stop 은 함수명
xml_set_element_handler($parser,"start","stop");

// data handler 등록, char 는 함수명
xml_set_character_data_handler($parser,"char");

//Open XML file
$fp=fopen($readFile,"r");

//Read data
while (!feof($fp)) { // 파일의 마지막까지
    $data = fgets($fp);  // 파일을 한줄씩 읽어들인다.
    xml_parse($parser,$data,feof($fp)) or
    die (sprintf("XML Error: %s at line %d", xml_error_string(xml_get_error_code($parser)),
    xml_get_current_line_number($parser)));
}

//Free the XML parser
xml_parser_free($parser);

//Function to use at the start of an element
function start($parser,$element_name,$element_attrs) {
    global $parsedata;
    $parsedata = "";
}

//Function to use at the end of an element
function stop($parser,$element_name) {
    switch($element_name) {
        case "user_id":
            $user_id = $parsedata
            break;
        case "user_email":
            $user_email = $parsedata
            break;
        case "content":
            $content = $parsedata
            break;
        case "item":
            // <item> </item> 으로 하나의 자료가 끝나는 시점이므로 parse data 를 DB에 저장 처리
            // DB 저장시 key 값 기준으로 데이터 중복체크하여 insert, update 처리
            break;
    }
}

//Function to use when finding character data
function char($parser,$data) {
    global $parsedata;
    $parsedata = $data;
}

?>


728x90
블로그 이미지

Link2Me

,