오늘은 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
오랜만입니다~~  (__
프로젝트가 한달 늦어지고 면접일정도 오락가락 한다고 포스팅이 뜸했네요..
이번 프로젝트는 멤버십과 연관이 있어서 포스팅하기가 그래서 개발 과정에서 공부하는 것들을 정리 해 볼까 합니다.

제가 개발하게 된 부분중 하나가 웹에서 동작하는 RSS리더기를 만드는 것입니다. 요즘은 조금 뜸하지만 한 5년 전까지만 해도 활발하게 개발 되었는데 좀 늦은 감이 있군요.. 그래도 제가 웹 프로그래밍관련해서 처음 해보는 것이기 때문에 충분히 개발능력에 향상이 될 거라는 것에는 믿어 의심치 않습니다.

자~ 잡담은 그만 하고 본론으로 들어가도록 하겠습니다.

[RSS리더가 무엇인가?]

RSS리더를 만들어야 하는데 RSS가 무엇인지 모르는 사람은 없을 거라 믿고 과감히 스킵하도록 하겠습니다. 그래도 궁금해 하시는 분들을 위해서 RSS를 잘 설명하고 있는 사이트를 링크하겠습니다.


[RSS의 종류는 어떤 것이 있는가?]

RSS는 버전이 많지만 크게 나누면 세가지로 분류 할 수 있습니다.

RSS 2.* 계열
RSS 1.* 계열
ATOM

각각은 특색이 있는데 RSS리더를 구현할때는 크게 의미는 없을 것 같습니다.
좀더 자세한 설명은 다르 사이트를 참고 하세요. 제가 참고 했던 사이트를 링크하겠습니다.

모질라 개발자 센터 - https://developer.mozilla.org/Ko/RSS/Version

다음 포스팅에서는 RSS 2.0버전을 토대로 실제로 RSS를 읽어 보도록 하겠습니다.


신고
by danguria 2010.04.13 21:52
오랜만입니다.ㅋ
제가 면접을 준비한다고 포스팅이 조금 뜸했군요..

아무튼!!
POAD과제가 바뀌게 되었습니다. 과제 프로토타입을 계속 만들면서 왠지 썩 내키지가 않았었습니다.
아이디어 자체는 나쁘지 않은것 같지만, 결국 만들어 놓고 보면 기존의 CASE툴과 크게 차별화 할 수 있을까 하는 의구심이 들었습니다. MDA(Model Driven Architecture)에 대한관심이 많지만 자신이 없었습니다. 그러던 그때, 운영자께서 멤버십 내에서 쓸 지식 공유 시스템을 구축할 팀을 구하더군요, 이때다 싶어서 팀원들과 상의를 한뒤 프로젝트를 변경했습니다.

멤버십 지식공유 시스템은 다음과 같습니다.
평소 멤버십 회원간의 지식 공유가 적다. 회원 개개인은 자신의 블로그를 통해 글을 포스팅 하고 있지만, 그것이 멤버십 내에서 유용하게 쓰이지 못한다. 또한, 멤버십 공유 폴더의 정보가 많아지고 있는 상황에서 그것을 효과적으로 검색할 무언가가 필요한다..

이런정도의 필요성이 있었기에 저희 팀이 "지식공유 시스템"이라는 임시 이름을 붙여 제안서를 쓰고 있습니다. 아마도 웹사이트를 구축하게 될텐데요..

웹프로그래밍을 해본적이 없어서 공부하고 있습니다. 실버라이트, WCF , DB등을 공부하고 있는데 면접때문에 조금 진도가 잘 나가지 않고 있군요..

이번 과제는 외부에서 의뢰를 한점이라는 것이 특이하고, 이 점으로 부터 얻을 수 있는 경험이 많을 듯 합니다.

열심해 해봐야 겠습니다.


신고
by danguria 2010.03.26 13:18
멤버십에서 새로운 프로젝트를 진행하기 위해서 아이템과 팀을 꾸린지 한달 가량 

되어가는 군요..

일단 과제 제안서를 작성하고 소프투웨어 분과장의 응답을 기다리는 중이지만 미리 

시작 세미나와 프로토 타입을 준비하고 있습니다.

이번에 프로젝트 진행하는 절차가 조금 바뀌어서 좀 걱정되기는 하지만 준비하는 만큼 

결과가 돌아 오겠죠.ㅋ

우선 PL로서 평소 팀 프로젝트를 하면서 하고자 했던 것들을 하나하나 해보려고 합니다.

프로젝트 결과도 중요하지만 과정 역시 중요하다고 생각하기 때문이죠..

프로젝트 일정이에 대해서 궁금하시다면, 

http://poad.springnote.com로 들러 주세요~
신고
by danguria 2010.02.19 13:28
| 1 |

티스토리 툴바