XPath로 웹에서 필요한 부분을 가져오자!
프로그래밍/PHP 2011.01.21 00:02 |XPath라는 것이 있습니다.
W3C 표준으로써 XML문서의 노드를 정의하기 위하여 경로식을 사용하며, 수학 함수와 기타 확장 가능한 표현들이 있습니다.
무슨 말인지 모르겠죠?
그냥 간단히 말해서 XML 형식의 문서가 있으면, 그 중에 특정한 부분의 값을 가져오기 위한 방법이라고 생각하시면 될 것 같습니다.
예를들어 아래와 같은 XML 문서가 있다고 하겠습니다.
<?xml version="1.0" encoding="UTF-8"?> <channel> <item> <id>donxu</id> <name>동수</name> </item> <item> <id>ehxm</id> <name>경호</name> </item> <item> <id>ange</id> <name>광휘</name> </item> </channel>
여기에서 name에 접근하려면
//name
으로 접근할 수 있습니다.
물론, 이렇게 하면 3개의 name값을 다 가져오게 되죠.
자세한 문법은 아래의 링크를 참조하시죠.
XPath를 이용하면 특정 이름, 속성, 값을 갖는 태그에 접근이 가능합니다. 물론, 그러한 태그가 여러개가 있다면 그 중에 하나를 선택할 수도 있구요.
그렇다면 본격적으로 php에서 XPath를 사용하는 방법을 알아보도록 하죠.
일단, 저는 XPathManager클래스를 만들어서 사용합니다.
<?php Class XPathManager { private $url; private $dom; private $xPath; public function XPathManager($strUrl) { $this--->url = $strUrl; // 객체 생성 $this->dom = new DOMDocument(); $this->dom->loadHTMLFile($strUrl); $this->xPath = new DOMXPath($this->dom); } public function getObjectList($strQuery) { $result = $this->xPath->query($strQuery); return $result; } } ?>
이렇게 XPathManager클래스를 두고, 실제로 파싱을 하는 php문서에서 사용을 하면 됩니다.
그렇다면 바로 실전으로 들어가보죠.
여기에서는 http://donxu.tistory.com 의 메인 화면에 있는 recent post의 각 항목들을 출력해보도록 하겠습니다.
<?php include "XPathManager.php"; $strUrl = "http://donxu.tistory.com"; $xPathManager = new XPathManager($strUrl); $recentPosts = $xPathManager->getObjectList("//div[@id='recentPost']/ul/li/a"); for($i = 0; $i < $recentPosts->length; $i++) { $value = $recentPosts->item($i)->nodeValue; echo "$value"; } ?>코드를 보시면 2번째 줄에서 XPathManager.php를 include하고 있고, 5번째 줄에서 XPathManager 객체를 만듭니다.
이때에 http://donxu.tistory.com을 인자로 넣어주는 군요. 이렇게 함으로써 http://donxu.tistory.com페이지를 내부적으로 로드하게 됩니다.
7번째 줄을 보시면 xPathManager객체에서 getObjectList()함수를 사용합니다. 이 때에 인자로 XPath문법이 사용되는 군요.
//div[@id='recentPost']/ul/li/a 가 recent post의 각 항목에 해당하는 식입니다.
이러한 식을 구하는 방법은 다음에 알아보도록 하겠습니다.
9~12번째 줄은 이렇게 가져온 값들을 한줄씩 출력해주고 있습니다.
실제로 이 코드를 실행해보니 아래와 같은 결과가 나오는군요.
어때요?? 쉬우신가요??
이런식으로 모든 XML 문서뿐만 아니라, 웹페이지에서도 원하는 정보를 가져올 수 있습니다.^^
'프로그래밍 > PHP' 카테고리의 다른 글
XPath로 웹에서 필요한 부분을 가져오자! (0) | 2011.01.21 |
---|---|
php에서 파일이나 웹 페이지를 그대로 출력하는 방법 (0) | 2011.01.20 |
php에서 xml 출력시 주의할 점!!! (0) | 2011.01.20 |
POST 방식의 웹페이지 출력하기(php) (0) | 2010.12.24 |
웹 문서를 만들 때에는 validator를 꼭 사용하자!! (2) | 2010.01.04 |
웹 페이지 한글이 깨지는 문제 (3) | 2010.01.04 |
댓글을 달아 주세요