블로그는 귀차니즘

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

Systeml.Xml in C# - C#에서 Xml 사용하는 방법

Programming 2008/03/18 23:59 귀차니스트

  C++ 에서는 MSXML Parser SDK 를 별도로 깔아 사용하고, GDI Plus 를 깔아 사용했던 것과는 달리 C++.Net 을 비롯한 C#, 즉 .Net 환경에서는 기본적인 네임 스페이스로 위 기능들이 지원됩니다. 어떻게 하냐구요. 물론 시중에 나와있는 책 들도 많습니다. 하지만 최근에 일하는 도중 XML을 이용한 Data Serialization, Deserialization을 구현하다 보니 그냥 자료정리겸 남겨봅니다.
  일단 System.Xml 네임스페이스를 프로젝트에 참조로 추가하고 System.Xml. 네임스페이스를 입력하게 되면 VS.net 의 인텔리 센스가 작동하여 코드가 표시되는데 대부분의 접두어가 Xml 입니다. 종류도 많습니다. XmlNode, XmlElement, XmlText 등 그런데 실제로 해당 객체를 생성하고하면 생성이 되지 않습니다. 그럼 어떻게 생성을 하여야 할까요?

Test.cs (Language : csharp)
  1. private void test()
  2. {
  3.     System.Xml.XmlDocument Doc = new System.Xml.XmlDocument();
  4.     System.Xml.XmlElement Elem = Doc.CreateElement("String");
  5.  
  6.     Doc.AppendChild(Elem);
  7.  
  8.     Doc.Save("a.xml");
  9. }

  위와 같은 코드를 사용하시면 됩니다. Document 에서 멤버 메소드로 CreateElement 를 호출하시면 되죠. 이와 비슷하게 CraeteAttribute 같은 함수를 사용하시면 추가적으로 모든 요소를 생성하실 수 있습니다. 그리고 AppendChild 를 호출하게 되면 자기 자신의 자식으로 속성을 추가하게 되죠. 물론 XmlAttribute 이나 XmlText 이냐에 따라서 Save시의 결과물 값이 달라지게 됩니다. 무작정 자식노드로 추가하지는 않는다는 말이죠.
  그럼 반대로 읽어오는 것은 어떻게 하면 될까요??

Load.cs (Language : csharp)
  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3.     System.Xml.XmlDocument Doc = new System.Xml.XmlDocument();
  4.     Doc.Load("a.xml");
  5. }

 아주 간단합니다. Load 라는 메소드를 사용하면 해당 Xml 파일에 대해서 내부적인 파싱을 하여 데이터를 가지고 있게 됩니다. 물론 형태는 XML 형태를 준수하여야 겠죠. 그리고 내부 사용은 Doc.ChildNodes 들을 가지고 자식으로 노드를 타고 내려가며 처리를 하면 됩니다.
  한 때 XML이 인기가 많았던 적이 있었는데 지금은 영 말이 아닌것 같습니다. 그래도 꽤 쓸만한 것이다 보니 유용하게 사용할 부분도 많을것 같네요.

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

"Programming" 분류의 다른 글

Script Interpreter - boost::spirit (0)2010/03/09
Gradient에 대한 정리 (2)2009/01/07
한게임 자동테트리스 Ver 0.6 (40)2008/11/15
한게임 자동테트리스 Ver 0.2 (27)2008/11/03
Read Sector From Floppy (0)2008/07/17
2008/03/18 23:59 2008/03/18 23:59
TAG .Net, C#, System.Xml, XML
받은 트랙백이 없고, 댓글이 없습니다.

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

댓글을 달아 주세요

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

댓글을 달아 주세요

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

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

카테고리

  • 전체 (118)
    • Computer (3)
    • Language (14)
    • Reverse Engineering (1)
    • Algorithm (9)
    • TopCoder (3)
    • Library (2)
    • Programming (21)
    • Programming Tip (9)
    • PSP-Programming (10)
    • Program (5)
    • Small Talk (33)
    • Document (4)
    • OS Develope (4)

최근에 올라온 글

  • Script Interpreter - b....
  • VirtualHttpServer - 가.... (2)
  • 음.. 여러가지 일이 있.... (2)
  • 어후.. 드디어 인터럽트....
  • Kernel Image에 어이없....

최근에 달린 댓글

  • 헠 ㅋ 다음에도 들러주세용 ㅋㅋ. 귀차니스트 03/09
  • ㅎㅎ RSS로 첨 온 글이네.ㅋ. 당구리 02/22
  • 음.. 한글화 파일 0.5 버젼은.... 귀차니스트 02/22
  • 관리자만 볼 수 있는 댓글입.... 비밀방문자 01/30
  • 어떤 의미이신지 잘 모르겠네.... 귀차니스트 01/23

달력

«   2010/03   »
일 월 화 수 목 금 토
  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 프로그래밍 세상.
  • runner님의 이글루.
  • 당구리의 마굿간.
  • 동우fly.
  • 류광의 번역 이야기.
  • 서광열의 프로그래밍 언....
  • 준호씨의 블로그.
  • 최익필의 이름없는 블로그.
  • 위키는 귀차니즘.

최근에 받은 트랙백

  • 한게임 테트리스 인공지.... 고니's Life 2009
  • ACM 706 (Uva ID) : LCD.... 알고리즘 트레이닝 : Oh... 2009
  • 문제 4 : LCD 디스플레.... 최익필의 이름없는 블로그 2009
  • 궁극의 예외처리. 이름없는 블로그 2008
  • Maximum sum. 티스토리 지점 2008

글 보관함

  • 2010/03 (1)
  • 2010/02 (1)
  • 2010/01 (1)
  • 2009/12 (3)
  • 2009/08 (1)

태그목록

  • C++
  • ++i
  • Hexrays
  • RLE8
  • 압축
  • Return
  • 후위연산
  • Textcube
  • 디코딩
  • TopCoder
  • 재귀적합성
  • Builder
  • Programming
  • Call By Value
  • HTTP
  • TShell
  • Reverse Engineering
  • Warcraft3
  • Interpreter
  • std::auto_ptr
  • ostreambuf_iterator
  • 해로
  • 한글표현
  • 한글화
  • 부트로더
  • Run Length
  • 보안
  • 개발일지
  • Chaos
  • DP

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