'XML'에 해당되는 글 4건

  1. 2008.04.01 XML Serialize
  2. 2008.03.05 클래스의 XML 문서화.
  3. 2008.02.29 Xml 스키마, 클래스.
  4. 2008.01.16 XML 간단한 설명

XML Serialize

Program/C# 2008. 4. 1. 12:00
환경 : VS2008, WPF 프로젝트

Xml Selralize 를 사용하는데 있어서 좋은 정보를 제공하는 곳입니다.
http://www.ensimple.net/enSimple/show.aspx?cnum=68&b_id=study_csharp&page=1

http://www.topxml.com/xmlserializer/serialize_class.asp

Serialize 를 사전에서 찾아보면 "번호순으로 나열하다" 라는 군요..
데이터를 스트림의 형식으로 표현하여 읽고 쓰기를 한다는 의미 같습니다.

제가 Serialize 를 사용하게 된 계기는 XML 문서를 메모리 상에 클래스로 구조화 하기 위해서 였습니다.
그러기 위해선 우선 해당 XML 문서의 형식에 맞는 클래스가 존재 하여야 할 것입니다.

MSDN을 에서 XSD를 검색해보면 ..
XML 문서의 스키마를 생성하고 이를 클래스 화 하는 방법에 대해서 아실 수 있을 겁니다.
이렇게 생성된 클래스를 사용하는데 있어서 주의 할 점은..
기본값의 사용입니다. XML 무서의 특정 노드에 값이 없을경우 클래스는 기본 값 설정을 하여야 할 것입니다.
또한 노드 컬렉션에 값이 없을경우 이런 경우 클래스의 컬렉션은 null 값 조차 가지지 않습니다.
해당 컬렉션의 유효성을 판단하기 위해 null 비교 하였다면 바로 에러가 날 것입니다.
스키마 혹은 클래스를 조작하여 이런 경우에 대비 할수가 있습니다만,
이번 포스트의 범위가 아니므로 넘어가도록 하겠습니다.

XML 문서의 구조가 비교적 간단 하다하면 위와 다르게 직접 클래스를 생성하셔도 될것입니다.
XML 시리얼 라이져는 프로퍼티 및 public 영역에 대해 XML 문서와의 매칭을 하게 됩니다.

[XmlAttribute()]
public string book {get; set;}

이런식으로 선언하게 되면 book 이라는 에트리 뷰트가 생성되게 되는 거죠...
주목할 점은 [] 부분 입니다.
사실 대괄호 안의 값을 변경함으로서 우리는 좀 더 테크니컬할 클래스를 생성 할 수가 있습니다.
이에 대한 설명은 상단의 두번째 링크된 페이지를 참조 하시면 될 것입니다.

클래스의 이름은 노드가 되고 클래스 내에 설정된 에트리 뷰트 및 노드들은 클래스 노드의 자식노드가 됩니다.
만약 클래스가 컬렉션을 포함하고 있다 해도 같은 원리가 되는 것이지요..
사용자 삽입 이미지


읽어드리는.. 디시리얼 라이즈 하는 부분입니다.
Page 라는 클래스는 제가 정의한 클래스 입니다.
이 클래스 타입에 맞는 시리얼라이져를 생성한후,
읽어드릴 XML 문서의 경로에 해당하는 XmlTextReader 를 생성합니다.
그리고 디시리얼라이즈.. 간다하죠..

그렇다면 쓰기.. 시리얼라이즈 하는 부분에 대해서 알아볼까요..
사용자 삽입 이미지


기본 디시리얼라이즈에 역순입니다.
XmlSerializerNamespaces 라는 것은 시리얼라이즈시에 루트 노드의 네임스페이스를 셋팅하는 부분입니다.
저부분을 삭제하고 실행 해보면 기본 네임스페이스(?? 기억이..)가 들어가는 것을 보실 수 있습니다.

잦은 시리얼라이즈의 사용은 프로그램에 부하가 된다고 합니다만.. 전 아직 잘 모르겠군요..
잦은 이라는 정도가 어느 선까지를 말하는지...

이제 시리얼라이즈의 대상이 되는 클래스를 만드는 부분과 DOM 에 대한 이해만 충분하다면
XML 문서를 조작하는데 있어서는 무리 없을 것 같습니다.

이는 다음 기회에 ~
:

클래스의 XML 문서화.

Program/C# 2008. 3. 5. 10:17
XMLSerializer 를 이용하여 클래스를 XML 문서화 할 수 있다.
클래스는 직접 만들어 질 수도 있고, Xsd.exe 를 통해서 생성될 수 있다.

    XmlRootAttribute xRoot = new XmlRootAttribute();
    xRoot.ElementName = "CustomRoot";
    xRoot.Namespace = "http://www.cpandl.com";
    xRoot.IsNullable = true;
     
    XmlSerializer serializer = new XmlSerializer(typeof(OrderedItem),xRoot);
     
    OrderedItem i = new OrderedItem();
     
    TextWriter writer = new StreamWriter(filename);
    
    serializer.Serialize(writer, i);
    writer.Close();

XmlSerializer 생성자들을 살펴 보면 다양한 형태의 저장이 가능하다.
위 에제에서 xRoot를 사용한 이유는 저장될때 노드의 네임이 클래스의 네임을 그대로 인용하는데, 전 노드의 이름을 따로 주어야 했기 때문이다.

Korea MSDN 링크
http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/cpref/html/frlrfSystemXmlSerializationXmlSerializerClassTopic.asp

'Program > C#' 카테고리의 다른 글

CreateDirectory 사용권한  (0) 2008.03.06
차일드 컨트롤들의 열거...  (0) 2008.02.29
전역 변수, Properties  (0) 2008.02.29
:

Xml 스키마, 클래스.

Program/C# 2008. 2. 29. 13:42

XML 문서의 내용을 메모리 상에 올려 관리 해야 할 때가 있습니다.
그냥 문서를 로드 해서 값의 변경 저장을 할 수 있겠지만...
이하 방법은 메모리 상에 클래스로 관리되는 것입니다.

<< VS2008 기준 >>
1. 스키마 생성..
VS 툴에서 XML 파일열기를 합니다.
XML 문서가 열리면 VS 툴 메뉴 바에 [XML] - [Create Schema] 메뉴가 생성됩니다.
스키마 생성후 저장...

2. 클래스 생성
스키마를 저장할때 확장자를 보시면 ".xsd"임을 알 수가 있습니다.
전 파일 이름을 test.xsd 이렇게 하겠습니다.
이를 가지고 클래스로 뽑아내야 하는데요...
이때 사용하는 것이 Xsd.exe 입니다.
전 커멘드 모드에서의 사용법을 설명 할 것입니다.
UI 모드도 있어 보이는데... VS 2008 RTM 모드에서 설치가 안되느군요...

VS툴 메뉴에 [Tools] -[ Visual Studio 2005 Command Prompt] 메뉴를 누르시면 도스 창이 생성됩니다.
커멘드 입력시 파일의 경로를 일일이 넣어주기 귀찮으니..
생성된 스키마 파일을 "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin"
이곳으로 옮겨주시고...
커멘드 창에서
XSD.exe /c /n:MyName test.xsd 이렇게 입력하시면 같은 폴더에 .cs 파일이 생성됩니다.
이렇게 하시면 xml을 담을수 있는 클래스 생성 끝..
/c : 클래스로 뽑아내라는..
/n : 네임스페이스..
기타 다른 명령어는 MSDN 검색 ~~`

3. 사용하기 XML 로드, 저장

            XmlSerializer serializer;
            TextReader reader;

                serializer = new XmlSerializer(typeof(생성된XML 문서의 클래스 명을 적어주세요~));
                reader = new StreamReader(XML 문서경로를 적어주세요);
                MyXmlClass = (캐스팅해주세요~)serializer.Deserialize(reader);
                reader.Close();
                reader.Dispose();

이런식으로 시리얼라이징 해서 사용하시고..
저장시에는 역순으로??

이러한 방법을 사용한 이유는 여러개의 XML 문서를 로드하여.. 조합하고 관리해야 하기 때문이였습니다.
하지만, 문제점은 스키마를 생성할때 XML 문서는 XML 구조를 모두 포함한 표본 문서여야 한다는 것입니다.
만약 이때의 스키마에서 조금이라도 틀어지는 ( 에트리뷰트가 추가되었다거나..) 문서일경우...
로딩 실패 에러를 내버립니다.. 소스상 try catch 필수겠죠;;;

지금 일반 텍스트 리더로 XML 문서를 로드하여.. 관리하고자 하는 노드들을 DataTable 에 보관하는 방법을 알아보고 있는데.. 문제는 여러 문서에서 뽑아낸 노드들을 통합하여 저장하는 것이안되는 군요...
방법을 아신다면 댓글 ㅡㅠㅡ



'Program > C#' 카테고리의 다른 글

ListView 데이터 바인딩..  (0) 2008.02.29
ElementHost 윈어플과 WPF 어플간의 컨트롤 사용  (2) 2008.02.29
Dispatchertimer  (0) 2008.02.29
:

XML 간단한 설명

Program/Info Etc 2008. 1. 16. 09:52
XML 정리

 

XML (eXtensible Markup Language) 정의 ~.xml

  eXtensible : 확장 가능한 Markup : 마크업 Language : 언어(규칙)

  쉽게 표현하면 새로운 태그를 만들 수 있는 규칙 정도의 뜻이다.

 

XML은 메타 언어(Meta Language)

  언어를 표현하는 언어라는 뜻이다.

  즉, 태그를 이용하여 문서의 의미를 표현하는 언어라는 뜻이다.

  예를 들어 <가수>원더걸스</가수> 에서 원더걸스는 가수라는 추가 정보가 있는 것이다.

 

XML의 역사

  SGML 과 HTML 의 장점을 결합한 것이 XML 이다.

 

XML 공부하려면 최소한 에디터와 브라우저만 있으면 된다.

  1. XML 을 공부하려면 유니 코드를 지원하는 에디터

     (메모장, 울트라에디터, 에디트플러스 등)

  2. XML 브라우저

     (인터넷 익스플로러, 파이어 폭스 등)

 

XML 문서는 Well-Formed Document와 Valid Document로 나뉜다.

  1. Well-Formed Document : 한 마디로 여는 태그와 닫는 태그만 맞으면 된다.

  2. Valid Document

     DTD나 XML 스키마로 XML 문서의 규칙을 지정하는 데 이 규칙에 맞으면 된다.

 

----------------------------------------------------------

 

DTD : Document Type Definition ~.dtd

  XML 문서의 규칙을 지정.

 

DTD 의 서브셋

    텍스트 선언, 엘리먼트 선언, 속성 선언, 엔티티 선언, 노테이션 선언,

    프로세싱 지시자 선언, 파라미터 엔티티 참조, 주석, 공백, 컨디셔날 섹션

 

텍스트 선언

    <?xml version="1.0" encoding="UTF-8" ?>

 

주석

    <!-- 주석 -->


엘리먼트 = 태그

  1. 여는_태그  <가수>

  2. 내용         원더걸스

  3. 닫는_태그  </가수>


엘리먼트 내용에 나올 수 있는 것

  1. #PCDATA

  2. 자식_엘리먼트

  3. EMPTY

  4. MIXED

  5. ANY


자식 엘리먼트 리스트 표현 방법

  1. ,   : <!ELEMENT 연예인 (전화번호, 주소)>  ;  전화번호 다음에 주소가 나온다.

  2. |  : <!ELEMENT 분류 (가수 | 배우)> ; 가수 / 배우 중에 하나가 나온다.

  3. ?  : 생략하거나 한번만 나온다.

  4. +  : 한번 이상

  5. *  : 생략하거나 여러 번


속성의 디폴트 선언

  1. #IMPLIED : 생략 가능

  2. #REQUIRED : 필수

  3. #FIXED : 고정값

  4. "임의의_내용"


엔티티 분류

  1. 물리적인 저장 단위 분류 : 내부, 외부

  2. 사용되는 곳 : 일반, 파라미터

  3. 문자인지 여부 : 파스드, 언파스드


빌트인 엔티티

  5개 ( &lt; , &gt; , &amp; , &quot; , &apos; )


노테이션 == MIME 타입


----------------------------------------------------------


XML 스키마 : XML Schema ~.xsd

  DTD 보다 정확한 자료 구조 표현 가능.


외부 스키마 참조

  include, import, redifine, anotation


엘리먼트와 속성 선언

  element, attribute, simpleType, complexType, group, attributeGroup, notation, anotation


----------------------------------------------------------


XPath (XML Path Language)

  XML문서에서 태그와 속성에 접근하기 위한 경로를 지정하는 언어.

  운영체제의 폴더(디렉토리)에 비유된다.


경로 구분 : 절대 경로, 상대 경로


----------------------------------------------------------


XSL ( eXtensible Stylesheet Language ) ~.xsl

  확장 가능한 스타일 시트 언어

  XML 문서를 다양한 형태로 변환할 때 사용한다.


XSL 구성 파트

  1. XSLT (XSL Transfomation)

  2. XPath (XML Path Language)

  3. XSL-FO (XSL Fomatting Object)

'Program > Info Etc' 카테고리의 다른 글

MD5 암호화  (0) 2008.01.16
USB 자동인식 방지  (0) 2008.01.16
Windwo Vista 버젼 비교  (0) 2008.01.16
: