PHP5로 갑시다: simpleXML 소개
Posted by 시리니04月 3
제가 자주 쓰는 웹스크립트 언어인 PHP는
10년이 넘는 역사를 가지고 있습니다.
본격적인 대중화의 길로 들어선 PHP3 부터,
대중적인 언어로 거듭난 PHP4 를 거쳐
이제 보다 강력해지고 발전된 PHP5 가
주 버젼으로서 관리되고 있습니다.
물론, PHP6 차기버젼이 준비중에 있구요.
PHP4는 사실상 업데이트가 이미 중단된 상태입니다.
한 때 논란이 일었지만 PHP팀에서 더 이상
이전 버젼을 붙잡고 있지만은 않겠다는 의지를 보여
반 강제적으로(;;;) 상위버젼으로의 업그레이드를
유도하고 있습니다.
(사실 여태까지 많은 시간동안 지원을 해주었습니다.)
어쨌든,
이런 저런 이유로 PHP5가 이제는 보급 되어야
할 때가 되었는데도 아직까지 PHP4에서 머물고 있는 것은
뭔가 많이 손해보는 느낌입니다.
제로보드도 이제 XE버젼의 시대가 열렸고, 더 나은 환경에서
더 좋은 동작을 보여주게 되었는데 아직까지 우리나라
웹호스팅 환경에서는 PHP5로의 이전이 멀어 보입니다.
그래서~!
왕허접 시리니가 간략하게 PHP5를 홍보하는
시간을 한 번 마련해 보았습니다.
오늘은 PHP5부터 기본으로 지원되는 simpleXML 확장에
대해서 소개해 볼까 합니다.

(이 확장에 관한 자세한 정보는 php.net 에서 확인하실 수 있습니다.)
요즘 이기종간의 데이터 송/수신을 위한 포맷으로
XML을 많이 사용하고 있습니다.
특히나 블로그에서 자동으로 데이터 목록을 갱신해서
지정된 규격으로 출력하는 RSS의 확산으로
갈수록 XML을 작성하고, 또 해석하는 일이
늘어나고 있는 추세 입니다.
PHP에서는 특히 웹에서 주로 유통되는 규격인 XML을
해석하기 위한 다양한 도구들을 지원하고 있습니다.
PHP4에서는 xml_* 로 시작하는 다양한 함수들을 통해
XML을 해석하는 방법을 제공했었는데 (SAX 방식) 그와
함께 DOM 방식으로 (W3C 에서 제안했죠.) 해석하는
방식도 제공했었습니다.
4버젼까지는 SAX방식으로 해석하는 것이 많았었는데
5버젼에서는 DOM방식으로 완전히 재편되었습니다.
(물론 이전 방식도 하위버젼 지원을 통해 사용 가능합니다.)
바로, simpleXML 이라는 확장을 통해서 말이죠. ^^;
간단하게 XML을 해석하는 두가지 방식에 대해서
말씀드리자면, 일단 SAX는 비교적 빠른 동작과 함께
한번 파싱한 데이터를 재사용하는데 문제가 있는 반면,
DOM은 XML 문서 구조를 객체화하여 메모리에 적재하는
과정으로 인해 조금 느린 반면 한번 해석한 데이터를
재사용할 때 유용하게 할 수 있다는 장점이 있습니다.
DOM 방식으로 확장을 지원하게 된 이유로는
아무래도 '재사용' 이 용이하고 객체적으로 데이터를
관리할 수 있다는 잇점이 작용했을 겁니다.
특히나 이전과 달리 하드웨어 환경이 급속도로 좋아지고 있어서
굳이 속도 때문에 SAX의 이벤트 방식을 고집할 이유가
없어진 것도 있습니다.
아무튼 PHP5에서는 이러저러한 이유로
DOM 방식을 통한 아주 멋진 XML 파싱 도구를 제공합니다.
simpleXML, 오늘은 이 것을 이용해서 많이 사용되는
규격인 RSS 2.0 을 실제로 해석하는 것을
한 번 해 보도록 하겠습니다.
(무척 간단하기 때문에 사실 별로 신경 쓸 것도 없습니다. ^^)
어떻습니까?
무척 쉽죠! ^^;;;
요즘 대부분의 언어들이 객체지향적으로 프로그램 짜는 것을
지원해주고 있기 때문에 설사 PHP를 잘 모른다고 하셔도
위의 코드는 쉽게 읽혀질 수 있으리라 생각됩니다.
저 위의 내용중에서 가장 중요한 한줄을 뽑아 보겠습니다.
$parser = new SimpleXMLElement($rss);
위의 한 줄을 통해
스크립트를 작성하는 사람은 복잡하게 파서 핸들러 열고
구문 시작과 끝마다 이벤트를 발생시키는 부수적인 일을
하지 않고서도 쉽게 XML문서를 해석해 줍니다.
위의 코드 한 줄로 해석할 XML문서가 트리 구조로 메모리에
적재 되었습니다.
simpleXML 이라는 이름에서 알 수 있듯이
단순하고 강력하게 XML을 해석해서 사용할 수 있도록
해주는 유용한 도구입니다. PHP5 이상 버젼에서는
기본적으로 사용 가능하기 때문에
꼭 한 번 업그레이드를 통해서 개발시간을 단축시키고
성능을 높여 보시기 바랍니다. ^^
(아참, simpleXML 은 해당 문서의 XML 유효성을 체크해 주지
않는다는 것, 잊지 맙시다~!)
10년이 넘는 역사를 가지고 있습니다.
본격적인 대중화의 길로 들어선 PHP3 부터,
대중적인 언어로 거듭난 PHP4 를 거쳐
이제 보다 강력해지고 발전된 PHP5 가
주 버젼으로서 관리되고 있습니다.
물론, PHP6 차기버젼이 준비중에 있구요.
PHP4는 사실상 업데이트가 이미 중단된 상태입니다.
한 때 논란이 일었지만 PHP팀에서 더 이상
이전 버젼을 붙잡고 있지만은 않겠다는 의지를 보여
반 강제적으로(;;;) 상위버젼으로의 업그레이드를
유도하고 있습니다.
(사실 여태까지 많은 시간동안 지원을 해주었습니다.)
어쨌든,
이런 저런 이유로 PHP5가 이제는 보급 되어야
할 때가 되었는데도 아직까지 PHP4에서 머물고 있는 것은
뭔가 많이 손해보는 느낌입니다.
제로보드도 이제 XE버젼의 시대가 열렸고, 더 나은 환경에서
더 좋은 동작을 보여주게 되었는데 아직까지 우리나라
웹호스팅 환경에서는 PHP5로의 이전이 멀어 보입니다.
그래서~!
왕허접 시리니가 간략하게 PHP5를 홍보하는
시간을 한 번 마련해 보았습니다.
오늘은 PHP5부터 기본으로 지원되는 simpleXML 확장에
대해서 소개해 볼까 합니다.
(이 확장에 관한 자세한 정보는 php.net 에서 확인하실 수 있습니다.)
요즘 이기종간의 데이터 송/수신을 위한 포맷으로
XML을 많이 사용하고 있습니다.
특히나 블로그에서 자동으로 데이터 목록을 갱신해서
지정된 규격으로 출력하는 RSS의 확산으로
갈수록 XML을 작성하고, 또 해석하는 일이
늘어나고 있는 추세 입니다.
PHP에서는 특히 웹에서 주로 유통되는 규격인 XML을
해석하기 위한 다양한 도구들을 지원하고 있습니다.
PHP4에서는 xml_* 로 시작하는 다양한 함수들을 통해
XML을 해석하는 방법을 제공했었는데 (SAX 방식) 그와
함께 DOM 방식으로 (W3C 에서 제안했죠.) 해석하는
방식도 제공했었습니다.
4버젼까지는 SAX방식으로 해석하는 것이 많았었는데
5버젼에서는 DOM방식으로 완전히 재편되었습니다.
(물론 이전 방식도 하위버젼 지원을 통해 사용 가능합니다.)
바로, simpleXML 이라는 확장을 통해서 말이죠. ^^;
간단하게 XML을 해석하는 두가지 방식에 대해서
말씀드리자면, 일단 SAX는 비교적 빠른 동작과 함께
한번 파싱한 데이터를 재사용하는데 문제가 있는 반면,
DOM은 XML 문서 구조를 객체화하여 메모리에 적재하는
과정으로 인해 조금 느린 반면 한번 해석한 데이터를
재사용할 때 유용하게 할 수 있다는 장점이 있습니다.
DOM 방식으로 확장을 지원하게 된 이유로는
아무래도 '재사용' 이 용이하고 객체적으로 데이터를
관리할 수 있다는 잇점이 작용했을 겁니다.
특히나 이전과 달리 하드웨어 환경이 급속도로 좋아지고 있어서
굳이 속도 때문에 SAX의 이벤트 방식을 고집할 이유가
없어진 것도 있습니다.
아무튼 PHP5에서는 이러저러한 이유로
DOM 방식을 통한 아주 멋진 XML 파싱 도구를 제공합니다.
simpleXML, 오늘은 이 것을 이용해서 많이 사용되는
규격인 RSS 2.0 을 실제로 해석하는 것을
한 번 해 보도록 하겠습니다.
(무척 간단하기 때문에 사실 별로 신경 쓸 것도 없습니다. ^^)
───────[ 해석할 RSS 페이지 일부 내용 ]───────
───────[ 해석하는 스크립트 일부 내용 ]───────
<?php
// $rss 변수에는 해석할 RSS 페이지 내용이 들어가 있다고 가정
$parser = new SimpleXMLElement($rss);
echo $parser->channel[0]->link; // 사이트 링크 출력
echo '<br />';
echo $parser->channel[0]->item[0]->title; // 첫번째 글제목 출력
echo '<br />';
echo $parser->channel[0]->item[0]->pubDate; // 첫번째 글 쓴 시간 출력
?>
───────[ 해석 후 출력되는 내용 ]───────
http://sirini.net/blog
쉽게 읽혀지는 글쓰기
Wed, 02 Apr 2008 21:39:30 +0900
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>SIRINI`s Blog</title>
<link>http://sirini.net/blog</link>
<description>life, saying, developing, ... and so on</description>
<generator>GR Blog</generator>
<language>ko</language>
<item>
<title>쉽게 읽혀지는 글쓰기</title>
<link>http://sirini.net/blog/?p=546</link>
<pubDate>Wed, 02 Apr 2008 21:39:30 +0900</pubDate>
...하략...
───────[ 해석하는 스크립트 일부 내용 ]───────
<?php
// $rss 변수에는 해석할 RSS 페이지 내용이 들어가 있다고 가정
$parser = new SimpleXMLElement($rss);
echo $parser->channel[0]->link; // 사이트 링크 출력
echo '<br />';
echo $parser->channel[0]->item[0]->title; // 첫번째 글제목 출력
echo '<br />';
echo $parser->channel[0]->item[0]->pubDate; // 첫번째 글 쓴 시간 출력
?>
───────[ 해석 후 출력되는 내용 ]───────
http://sirini.net/blog
쉽게 읽혀지는 글쓰기
Wed, 02 Apr 2008 21:39:30 +0900
어떻습니까?
무척 쉽죠! ^^;;;
요즘 대부분의 언어들이 객체지향적으로 프로그램 짜는 것을
지원해주고 있기 때문에 설사 PHP를 잘 모른다고 하셔도
위의 코드는 쉽게 읽혀질 수 있으리라 생각됩니다.
저 위의 내용중에서 가장 중요한 한줄을 뽑아 보겠습니다.
$parser = new SimpleXMLElement($rss);
위의 한 줄을 통해
스크립트를 작성하는 사람은 복잡하게 파서 핸들러 열고
구문 시작과 끝마다 이벤트를 발생시키는 부수적인 일을
하지 않고서도 쉽게 XML문서를 해석해 줍니다.
위의 코드 한 줄로 해석할 XML문서가 트리 구조로 메모리에
적재 되었습니다.
simpleXML 이라는 이름에서 알 수 있듯이
단순하고 강력하게 XML을 해석해서 사용할 수 있도록
해주는 유용한 도구입니다. PHP5 이상 버젼에서는
기본적으로 사용 가능하기 때문에
꼭 한 번 업그레이드를 통해서 개발시간을 단축시키고
성능을 높여 보시기 바랍니다. ^^
(아참, simpleXML 은 해당 문서의 XML 유효성을 체크해 주지
않는다는 것, 잊지 맙시다~!)
ps. XML은 생각 보다 많이 만나게 되는 문서 양식입니다.
Java 에서도 SAX 방식이랑 DOM 방식으로 해석하는 파서가 있고
최근에 나온 대부분의 언어들에서 XML을 중요하게 지원하고 있는
이유가 분명 있습니다. 언젠가 공부가 더 된다면 XML에 대해서
한 번 같이 수다를 나눠볼 기회가 생기도록 해보겠습니다. :)
Java 에서도 SAX 방식이랑 DOM 방식으로 해석하는 파서가 있고
최근에 나온 대부분의 언어들에서 XML을 중요하게 지원하고 있는
이유가 분명 있습니다. 언젠가 공부가 더 된다면 XML에 대해서
한 번 같이 수다를 나눠볼 기회가 생기도록 해보겠습니다. :)
7 Responses
[laziel] DELETE REPLY*
[시리니] DELETE
네 맞습니다. xml 은 정말 잘 만든 언어구조인 것 같습니다.
후에 한 번 같이 이야기 해보아요~^^
[?] DELETE REPLY*
[시리니] DELETE
만약 해당 서비스가 열려진 공간이라면 RSS 등록을 해보도록 하겠습니다. ^^;
자세히 잘 몰라서 즉답을 못드려 죄송합니다~.
[BENEGLO] DELETE REPLY*
XML 처리를 해야되는데 이 포스트보고 참고합니다
[시리니] DELETE
제 지식이 짧아서 얼마나 도움이 되셨을런지 모르겠네요. ㅎㅎ;;
[sanjar] DELETE REPLY*
echo mb_detect_encoding($parser, "auto");
찍어보면 ASCII 코드로 나옵니다.