HTML 파서 – 2.파서 관련 함수

제공되는 함수

현재는 xml 파서 함수 중 xml_parse_into_struct 함수를 모델링한 html_parse_into_struct 함수만 제공됩니다.

함수 버전 기능 클래스명
html_parse_into_struct 0.0.1 HTML 데이터를 배열 구조로 분석 HtmlParser

int html_parse_into_struct (string data, array &values)

html_parse_into_struct 함수는 HTML 규약에 의해 작성된 문서를 배열 구조의 데이터로 분석합니다. 이 배열 구조는 xml 문서를 분석하기 위하여 작성된 xml_parse_into_struct와 입력 및 출력 인터페이스가 거의 유사합니다. 그러나 xlm_parse_into_struct와는 달리 배열 구조내에서의 각 태그의 위치를 나타내는 index값을 반환하지 않습니다.

두번째 매개변수인 values는 반드시 “passed by reference” 되어야 합니다. reference(참조) 대한 자세한 정보는 홈페이지 메뉴에서 “핍클래스홈>>참조(레퍼런스)”을 보시기 바랍니다.

객체 생성 및 함수 실행

html_parse_into_struct 함수는 HtmlParser라는 클래스의 멤버로 존재하는 메소드입니다. 이 클래스는 class.htmlparser.php라는 파일명에 정의되어 있습니다.

HTML 문서의 문제점(?) -> html_parse_into_struct()의 한계

html_parse_into_struct를 작성하면서 느낀 점이 있다면 웹브라우저가 잘못 작성된 html 문서를 너무 많이 허용하고 있다는 것입니다. 물론 C 언어를 이용하여 작성한다면야 별문제 없겠지만 PHP 스크립트를 이용하여 작성된 파서에서 웹브라우저에서 허용하는 만큼의 융통성을 위해 모든 문제를 검사한다는 것은 실행시간의 한계로 인해 다소 무리가 될 것 같습니다. 따라서 html_parse_into_struct() 함수는 미완성인 HTML 문서를 분석하기에는 역부족이고 이미 작성되어 웹서비스를 하고있는 홈페이지 문서에 대하여 분석하는 정도로, 또한 너무 복잡하지 않고 가능한 단순한 문서를 분석하는 정도로 만족하여야 할 것 같습니다.

이 함수를 공개하기 전에 분석 및 활용의 적정성을 판단하기 위해 간단치 않는 실험을 수행하였습니다. 실험방법은 html_parse_into_struct() 함수를 통해 얻어진 데이터를 가지고 간단한 태그 유효성 검사 및 문제점 수정 단계를 거쳐 제가 이미 공개한 바 있는 유닛테이블 문서로 변환하는 실험이었습니다. 이를 단계별로 구분한다면 아래와 같은 3단계를 거치는 실험이었습니다.

  • HTML 문서 -> [HTML 파서 클래스] -> [태그 유효성 검사 및 수정 클래스] -> [문서변환 클래스] -> 유닛테이블 문서

이번에 공개하는 것은 이 중에 첫단계인 “HTML 파서 클래스”입니다. “태그 유효성 검사 및 수정 클래스”에서 하는 일을 보면 모든 문제점을 검사/수정하는 것은 아니고 <TABLE>, <TR>, <TD> 태그의 시작태그와 종료태그의 짝을 맞추기 위한 기능이 거의 전부입니다. 이러한 과정을 요구하는 이유는 유닛테이블 문서로 변환하려면 테이블 관련 태그에 대해 매우 엄격히 작성되어야 하기 때문입니다. 그런데 실험을 통하여 알게된 사실이지만 인터넷 상의 많은 문서가 이에 대하여 매우 소홀히 다루고 있다는 것입니다. 물론 웹브라우저가 알아서(?) 잘 보여주기 때문에 이 문제에 대하여 소홀히 다루게 되는 것 같습니다만 이와같이 적당히 웹문서를 만드는 것은 별로 좋은 습관이 아닌 것 같습니다.

이 실험을 통해 인터넷 상에 있는 웹문서들을 유닛테이블 문서로 변환하는데 대부분 성공하게 되었습니다. 시간 제약상 많은 문서에 대하여 실험할 수는 없었고 약 20여가지의 문서에 대하여 실험하였습니다.

  • cafe4.daum.net, asp.net, dialpad.co.kr, editplus.co.kr, java.sun.com, javascript.co.kr, namo.co.kr 중 게시판 부분, phpschool.com, phpclass.com, shinbiro.com, simmani.com, www.freechal.com, linux.sarang.net, yahoo.co.kr ……

이 실험을 통해 얻은 또 다른 것이 있다면 유닛테이블로 만이 아니라 우리가 잘 알고 있는 FastTemplate 문서와 같은 다른 템플릿 문서로 변환하는 것도 그리 어렵지 않다는 것이지요. 현재 많이 활용되고 있는 템플릿 기술이 XML로 가는 과정에서의 중간단계 역할로 많은 한계를 가질 수 밖에 없겠지만(???) 아직 인터넷 상의 모든 문서가 XML로 가기까지는 다소 시간이 필요할 것 같으며(모든 웹문서가 향후 XML로 작성되어야 하는지에 대하여는 잘 모르겠음), 당장에 순수 HTML 문서의 한계성을 극복하는 한 방편으로서의 템플릿 기술은 당분간 필요하다는 생각이 듭니다.

HTML 파서 클래스를 활용하여 여러분이 한번 HTML 문서를 FastTemplate 문서로 변환하는 클래스를 한 번 작성해 보시지 않겠습니까?

답글 남기기