오늘은 RSS 리더 만들기 두번째 시간입니다.
어제는 RSS가 무엇인지에 대해서 간단히 알아봤는데요..

오늘은 XML을 파싱하는 법에 대해서 알아보겠습니다.

"엥? XML을 파싱하더라도 RSS의 구조를 아는게 먼저가 되지 않나?"
하시는 분들도 있을 테지만
RSS도 XML로 만들어 졌으므로 일단 임의의 XML을 파싱해놓은 후, 
RSS의 구조에 맞게 해당 태그를 찾아 읽기만 하면 되는 것이겠죠.

그럼 XML을 어떻게 파싱을 하느냐?
많은 프로그래밍 랭귀지에서 XML을 파싱하기 쉽게 도와주고 있습니다.
여기서는 PHP의 XML Parser를 이용해서 구현해 보도록 하겠습니다.
이 XML Parser가 하는 일은 저도 완벽하게는 모르지만 제가 아는 정도만 이해 하셔도 xml을 파싱하는데는 무리가 없을 것입니다.

PHP의 XML Parser는 많은 함수를 제공하고 있는데요,
이 parser의 동작 원리는 "콜백함수"를 이용하고 있는 것입니다.
즉, 시작 태그를 만났을때, 태그 사이의 값을 만났을때, 종료 태그를 만났을때 이를 처리 하는 콜백 함수를 등록하는 것이 주요 원리 입니다.

xml_set_element_handler
xml_set_character_data_handler 

이 함수가 콜백 함수를 등록하는  함수들입니다.

xml_set_element_handler( $parser, startHandler, endHandler);
xml_set_character_data_handler( $parser, cdataHandler);

여기에 나오는 parser라는 변수는 무었일까요? 
파싱을 수행할 자원이라고 생각 하시면 됩니다.  이 자원을 얻기 위해서는

xml_parser_create 함수를 사용하시면 되구요, 그 예로는 

$parser = @xml_parser_create();

간단하죠?


이 함수들에 대한 구체 적인 예와, prototype은 
www.php.net 에서 보시면 됩니다. (메뉴얼 보는 것이 가장 중요하죠.ㅋ)

전체적인 흐름이 안들어오시나요? 그러면 이 함수들을 이용한 예를 보여 드리겠습니다.
$parser = @xml_parser_create();

if (is_resource($parser)){

   xml_set_object($this->parser, $this);
   xml_set_element_handler(
$parser,
"startHandler",
"endHandler");
   xml_set_character_data_handler(
$parser,
"cdataHandler");

}


function statHandler($parser, $element, $attr){
// 시작 태그 만났을때 여기서 처리
}


function endHandler($parser, $element){
// 종료 태그 만났을때 여기서 처리
}


function cdataHandler($parser, $cdata){
// 태그 사이 값을 만났을때 여기서 처리
}


xml_parse($parser, $data);  // $data <= xml file

// parser객체 해제
xml_parser_free($parser);
unset($parser);


이해가 가시나요? 

다음 시간에는 이 함수들을 이용하여 실제로 rss파일을 파싱해 보도록 하겠습니다.







신고
by danguria 2010.04.14 21:50
| 1 |