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
: