2011-04-01 2 views
1

다른 소프트웨어 시스템에서 많은 양의 XML 파일을 가져옵니다. 이 데이터로 많은 작업을해야하므로이 xml 데이터를 특정 도메인 모델로 변환하여보다 효율적으로 작업 할 수 있습니다. 그래서 XML 데이터를 도메인 모델에 그리고 그 반대로 매핑하는 메커니즘이 필요합니다. 내 가능성은 무엇입니까? 목록을 작성할 수 있습니까?XML 파일을 도메인 모델로 변환

  • Linq에 XML을 오 데르의 XML을 DOM에 LINQ를 통해
  • 데이터 세트를 (/ 쓰기 XML 읽기)
  • 수동 매핑을 XSD합니다!?
  • ...?

편집 :-) 미리 라우 린지

을 안부 감사 : 간단하게 말했다 : 나는 매핑을 OR 싶지만 대신 DBMS의 내가 XML 파일 ;-)

+1

이것은 내가 당신이 XML 파일로 할 필요가 정확히 무엇인지 잘 모르겠어요하지만 도움이 될 수있는 유용한 도구입니다. http://xsd2code.codeplex.com/ – pmcilreavy

+1

Xsd2Code는 두 단계로 작동합니다. 먼저 xsd.exe를 사용하여 xml 용 스키마를 생성해야합니다 (아직 스키마가없는 경우). Xsd2Code를 사용하여 스키마에서 도메인 모델을 생성합니다. Xsd2Code에는 데이터를로드하는 데 사용할 수있는 모델 클래스에 serialize/deserialize 메서드를 추가 할 수있는 명령 줄 스위치가 있습니다. 면책 조항 : Linq2Xml은 아마도 더 간단한 솔루션 일 수 있습니다 :) – MattDavey

답변

3

Linq to XML을 사용해보십시오. 매퍼는 다음 코드와 같은 모양입니다.

XML :로드 데이터에 대한

<contacts> 
    <contact contactId="2"> 
    <firstName>Barry</firstName> 
    <lastName>Gottshall</lastName> 
    </contact> 
    <contact contactId="3"> 
    <firstName>Armando</firstName> 
    <lastName>Valdes</lastName> 
    </contact> 
</contacts> 

코드 :

XDocument loaded = XDocument.Load(@"C:\contacts.xml"); 

매핑 : 도메인이있는 경우

List<MyContact> contacts = (from c in loaded.Descendants("contact") 
    select new MyContacts() { 
           FirstName = (string)c.Element("firstName"), 
           LastName = (string)c.Element("lastName") 
          }).ToList(); 
0

xml 모델과 개체 사이에 일대일 관계가 있다고 가정하고 System.Xml.Serialization.IXmlSerializable을 구현할 수도 있습니다. 더 많은 정보가 있습니다 Proper way to implement IXmlSerializable?

+0

이 솔루션은 단순한 경우보다 적은 코드 여야합니다 그러나 나는 그것이 객체들과 그것들을 물리적으로 표현하는 하나의 특정한 방법 사이에 너무 많은 결합을 생성한다고 생각한다. 예 : 대신 데이터 매퍼 패턴을 사용하는 경우 대체 "백엔드"형식을 사용할 수도 있습니다. 저장된 데이터의 한 버전에서 새 버전으로 마이그레이션하는 것이 더 깔끔하게 처리 될 것입니다 (직렬화 및 비 직렬화를 재정 의하여 수행 할 수 있다고 생각합니다). –

0

XML 직렬화가/드 - 직렬화가 좋은 생각을 것 같다 사용할 수있는 개체.

자세한 정보는 대한 XmlSerializer Class

+0

다른 답변에 대한 제 의견에 언급했듯이이 솔루션은 데이터 매퍼 패턴과 비교해도 너무 높습니다. –