블로그는 귀차니즘

First Sensation
  • 공지
  • 지역로그
  • 태그
  • 방명록

HTML Parser - XHTML 변환 파싱

Library 2008/02/23 20:24 귀차니스트
  대학교 3학년이 끝나는 2006년 12월 26일 병역특례를 하게 되었죠. 입사를 하고 나서 한 달이란 짧은 수습기간 동안 프로그램을 만들게 되었는데 그 중 필요했던 기능이 HTML Parsing 부분이었습니다. 그래서 W3C에서 공개 중인 Tidy 라이브러리를 이용한 HTML Parser를 개발하게 되었죠.
  흔히 말하는 HTML이라는 것이 Well-Formed 문서만 존재하면 좋지만 태그가 덜 닫힌 경우, 태그의 순서가 서로 얽혀있는 경우도 있기 때문에 바로 Pasing만 하는 것은 문제가 많습니다. 그래서 Tidy를 이용 HTML 을 XHTML 이나 XML 형식문서로 컨버팅 할 필요가 생기는 것이죠.
  이 라이브러리를 사용하여 XHTML, XML 문서로 컨버팅이 끝나게 되면 Parsing 과정은 말도 안 되게 쉬워집니다. XHTML, XML 이 XML Paser에서 인식이 될 수 있기 때문이죠, 저 같은 경우는 당시 필요한 부분이 그렇게 없었기 때문에 XPath를 이용한 함수들만 제작하여 사용하였습니다. 지금 생각하면 부족한 부분도 없지 않아 많군요^^.
  그런데 이 Tidy라는 라이브러리가 그 당시엔 그렇게도 골치를 썩혔답니다. 왜냐하면 흔히 HTML 문서에 한글이 포함되어있을 때 raw 라던가 자세히 기억나지는 않지만 euc-kr 변환을 하여야 하는데 공백을 나타내는 단어인 &nbsp; 이 포함되어있을 경우 때때로 이 단어의 태그 오픈 '<' 문자가 사라지는 문제점도 있었을 뿐더러 XML의 declaration인 <?xml version="1.0" encoding="euc-kr" ?> 부분이 euc-kr 로 세팅할 수 없어서( 제가 찾지 못했을 수도 있습니다. ) XML 파서에서 한글을 제대로 인식하지 못하는 경우까지 생기더군요.
  뭐 어쩔 수 없이 String 문자를 수동으로 붙이는 등의 꼼수를 동원하고서 원하는 결과를 얻었습니다. 물론 이렇게 만든 것을 사용하고 말았죠. 뭐 이런저런 추억을 잠기게 하는 것이긴 합니다만 필요할 때는 좀 더 좋게 만들어봐야겠습니다.

필요라이브러리 : MSXML Parser SDK 6.0
HtmlParser.rar
크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Library" 분류의 다른 글

IPangYa - 팡야 계산기 라이브러리 (0)2008/02/21
2008/02/23 20:24 2008/02/23 20:24
TAG HTML, HTML Parser, HTML 파서, XHTML, XML
받은 트랙백이 없고, 댓글이 없습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/15

댓글을 달아 주세요

IPangYa - 팡야 계산기 라이브러리

Library 2008/02/21 01:11 귀차니스트
  예전에 팡야 계산기를 만든 적이 있습니다. Microsoft Visual C++ IDE을 사용하여 만든 계산기였죠. 그 프로그램은 비록 수식과 변수를 입력받아 처리하게 하였지만 제가 만든 프로그램으로만 작동한다는 점이 있었죠. 그래서 생각한 것이 Microsoft 의 COM 기술을 사용한 라이브러리를 만들어보자는 것이었습니다. 그래서 만든 것이 IPangYa 라이브러리입니다.
  사용할 수 있는 언어는 COM 기술을 지원하는 언어라면 모두 사용할 수 있습니다. 이를테면 C#, VB, C++, Java, Delphi 같은 언어들 말이죠. 사용법은 특정 언어에 종속된 것으로 설명하지는 않겠습니다.

  먼저 아래 사항을 실행하시기 전 regsvr32 "dll경로\IPangYa.dll"로 등록을 해주셔야 합니다.

  IPangYa 라이브러리에는 CCalculator 클래스가 존재합니다. 이 클래스가 팡야 계산기 라이브러리의 대들보죠. 이 클래스에는 void SetVarialble( string VariableName, double VariableValue ); 함수와 double EvalExpress( string Expression, out int ErrorIndex ); 함수가 존재합니다.
  라이브러리를 사용할 때 수식에 필요한 변수는 SetVariable로 세팅 후, EvalExpress로 수식을 계산하게 됩니다. 그런데 수식을 어떻게 작성하고 변수와 함수를 호출하느냐가 중요한 포인트겠죠^^?

  1. 먼저 수식을 그냥 입력할 때입니다.
    1. SetVariable 함수를 호출하지 않습니다.
    2. EvalExpress함수의 첫 번째 인자에 "1 + 2 + 3 * ( 4 - 3 )" 과 같은 수식을 입력합니다.
    3. 리턴 값을 이용합니다.

  2. 변수를 사용하여 계산할 때입니다.
    1. ABC 변수에 100이라는 값을 넣으려고 한 다면 SetVariable( "ABC", 100 );을 호출합니다.
    2. EvalExpress함수의 첫 번째 인자에 "1 + 2 + [ABC]" 를 입력하고 호출합니다.
    3. 리턴 값을 이용합니다.

  3. 함수를 이용하여 계산할 때입니다.
    1. 기본적으로 지원하는 내장 함수들은 sin( 사인 ), cos( 코사인 ), tan( 탄젠트 ), abs( 절대값 ), asin( 아크사인 ), acos( 아크코사인 ), atan( 아크탄젠트 ), sgn( 0보다 크면 1, 0이면 0, 0보다 작으면 -1 ) , sqrt( 루트값 ), log( 자연로그 ), log2( 이진 로그 ), log10( 십진 로그 ), exp( 제곱 승 ), ceil( 올림 ), floor( 내림 ), round( 반올림 ) 입니다.
    2. EvalExpress함수의 첫 번째 인자에 "1 + 2 + [sin{30}]" 라고 입력하고 호출합니다.
    3. 리턴 값을 이용합니다.
    4. 만약 변수를 함수의 인자로 이용하고 싶다면 "1 + 2 + [sin{ABC}]" 라고 입력하면 됩니다. 물론 그전에 SetVariable로 ABC에 값을 할당해야 합니다.

  위와 같이 사용할 수 있습니다. 다만, 각 언어에 대해서 COM 객체의 클래스를 할당받는 방법은 다릅니다. 간단하게 C#을 예로 들겠습니다. C++도 있지만 갑자기 에러가 나네요.;

C# (Language : csharp)
  1. 1. 프로젝트 솔루션 뷰의 참조부분에서 IPangYa 라이브러리를 참조합니다.
  2. 2. 작성 코드 부분에 아래와 같이 작성합니다.
  3.  
  4. IPangYa.CCalculator clsCalc = new IPangYa.CCalculatorClass();
  5. clsCalc.SetVariable( "ABC", 100 );
  6.  
  7. int ErrorIndex;
  8. System.Windows.Forms.MessageBox.Show( clsCalc.EvelExpress( "1 + 2 + [ABC]", out ErrorIndex ).ToString() );

  위와 같이 쓰시면 해당 팡야 계산기 라이브러리를 이용하여 계산하실 수 있으실 겁니다.
그리고 EvalExpress 의 두 번째 인자인 ErrorIndex 는 에러가 난 지점을 건네받는데, 만약 그 값이 -3이라면 에러가 발생하지 않았고, -2 라면 알 수 없는 에러가 발생, 그 이후는 에러 지점의 한 칸 앞을 리턴 해줍니다. 다만 에러 그 자체가 아닌 에러가 발생한 단위의 인덱스입니다.
  미진한 부분이 많은 라이브러리이지만 유용하게 쓰셨으면 합니다.

IPangYa.rar

크리에이티브 커먼즈 라이센스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

"Library" 분류의 다른 글

HTML Parser - XHTML 변환 파싱 (0)2008/02/23
2008/02/21 01:11 2008/02/21 01:11
TAG ATL, COM, IPangYa, Library, 라이브러리, 팡야계산기
받은 트랙백이 없고, 댓글이 없습니다.

트랙백 주소 :: http://www.filewiki.net/tc/trackback/13

댓글을 달아 주세요

◀ 이전페이지 1 다음페이지 ▶

블로그 이미지
First Sensation 귀차니스트
rss
  • 관리자
  • 글쓰기

카테고리

  • 전체 (110)
    • Computer (3)
    • Language (14)
    • Reverse Engineering (1)
    • Algorithm (9)
    • TopCoder (3)
    • Library (2)
    • Programming (19)
    • Programming Tip (9)
    • PSP-Programming (10)
    • Program (5)
    • Small Talk (31)
    • Document (4)

최근에 올라온 글

  • Gradient 작성중에 있습.... (3)
  • 게임&인터랙티브 애플리....
  • 한게임 자동테트리스 Ve.... (24)
  • Intel 64 And IA32 Arch.... (2)
  • 한게임 자동테트리스 Ve.... (24)

최근에 달린 댓글

  • 다운어덯게 받아요. difl 2008
  • 멋있네요 ㅎㅎ. 준호씨 2008
  • ^^; 그러셨군요.. 사실 동영.... 귀차니스트 2008
  • ㅋㅋ 속도 튜닝의 무서움 ㅜ.... 귀차니스트 2008
  • 관리자만 볼 수 있는 댓글입.... 비밀방문자 2008

달력

«   2009/01   »
일 월 화 수 목 금 토
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

링크

  • kkamagui 프로그래밍 세상.
  • 류광의 번역 이야기.
  • 서광열의 프로그래밍 언....
  • 준호씨의 블로그.
  • 최익필의 이름없는 블로그.
  • 위키는 귀차니즘.

최근에 받은 트랙백

  • 궁극의 예외처리. 이름없는 블로그 2008
  • Maximum sum. 티스토리 지점 2008

글 보관함

  • 2008/12 (1)
  • 2008/11 (4)
  • 2008/10 (2)
  • 2008/09 (3)
  • 2008/08 (5)

태그목록

  • KDevelop
  • iterator_traits
  • 표준
  • 디자인
  • 폰트
  • STL
  • C#
  • 책
  • Compiler
  • 분양
  • 뻘글
  • 탑코더
  • VCL
  • Dialog
  • Timer
  • 프로토타입
  • ASM
  • Linux
  • 공백
  • ostream_iterator
  • 디자인패턴
  • 한국가상캠퍼스
  • istreambuf_iterator
  • priority_queue
  • As 형 변환
  • IPangYa
  • RLE8
  • 갑
  • ATL
  • Generics

지역로그 : 태그 : 방명록 : 관리자 : 글쓰기
귀차니스트’s Blog is powered by Textcube 1.7.5 : Risoluto / Designed by DesignNia.net