2011-02-16 4 views
1

주어진 XSD에 대해 유효성을 검사해야하는 xml로 변환해야하는 많은 개체 모음이 있습니다.제공된 xsd 스키마로 다수의 객체를 직렬화하는 방법은 무엇입니까?

클래스 구조가없는 매우 복잡 (하는게 먼지 너도 스무 속성과 자식 클래스의 두 목록) 예 :

public class Person 
{ 
    public string Street, Town, City, PostCode etc; 
    public double Income, Tax, etc.; 
    public List<Account> Accounts; 
    ... 
} 

하지만 예상 XML 출력 복잡하고 일치하지 않는 클래스 구조

<Person> 
    <Address> 
    <Street/><Town/><City/> 
    </Address> 
    <FinancialData> 
    <Income/><Tax/> 
    </FinancialData> 
    <Accounts> 
    <Account> 
    <No>1</No> 
    ... 
    </Accounts> 
</Person> 

그렇게하는 가장 좋은 방법은 무엇입니까?

나는

XElement document = new XElement("Person",    
    new XElement("Address", 
     new XElement("Street", this.Street), 
     new XElement("City", this.City), 
    new XElement("FinancialData", 
     new XElement("Income", this.Income), ... 

을 각 개체에 대해 XElement를 구조를 만든 다음하여 XDocument로 결합하고 저장하려고하지만 XElements을 만드는 과정은 매우 느리고 내가 50.000를 직렬화 할 필요가 wheras 200 개체가 몇 분 소요 사물.

XmlSerializer에 대해 생각했지만 class와 xsd가 일치하지 않습니다.

업데이트 : 내 기본 클래스를 매핑 한 사용자 지정 클래스를 만들었습니다. 그런 다음 XmlSerializer 및 해당 특성을 사용하여 xml 내 개체를 serialize합니다. 꽤 빠릅니다.

답변

0

음,이하여 XDocument (Linq2Xml는) ... 간단하지만 것

어떻게 된 데이터 집합에 대해? 2 가지 방법이 있습니다 :

  1. Visual Studio에서 생성 :

    • 하는 C# 프로젝트에 XSD를 추가.
    • 열기 "열기"솔루션 탐색기에서 파일, 데이터 집합을 클릭 예
    • 을 데이터 집합 Editor..yes를 선택하고 속성으로 이동 [your_class]에
    • 설정 이름과 MSDataSetGenerator
    • 에 사용자 지정 도구 설정
    • 이제 VS가 코드를 생성합니다. 그런 다음 생성 된 클래스를 코드에서 사용할 수 있습니다. > 비주얼 스튜디오 - -> Visual Studio 도구가 - 시작 메뉴에서
  2. 또는> 비주얼 스튜디오가 프롬프트 칭찬 클래스를 생성 할 수 있습니다 XSD.EXE있다.

    당신은 XSL 스타일 시트로 한 형식에서 다른 형식으로 XML 문서를 변환하는 당신은 XslCompiledTransform을 할 수 XmlSerializer를 사용하려는 경우

.

0

원하는 템플릿 엔진을 사용하는 것이 좋습니다 (예 : NHaml). 먼저 스키마에 맞는 XML 템플리트를 작성한 다음 템플리트 엔진을 사용하여 실제 데이터를 사용하여 템플리트를 렌더링하십시오.NHaml의 경우

는 다음과 같이 약 보일 것이다 :

%Person 
    %Address 
    %Street = person.Street 
    %Town = person.Town 
    %City = person.City 
    ... 
    %FinancialData 
    - foreach (var account in person.Accounts) 
    %Account 
     %No 
     = account.No 
     ... 
관련 문제