2009-07-28 9 views
1

XML 파일과 호환되는 응용 프로그램이 있습니다. xml 파일이 있으면 훌륭하게 작동하지만 출력 파일이없는 경우 빈 XML 파일을 생성 한 다음 프로젝트에 쓴다는 요구 사항도 있습니다.스키마가 하드 코딩 된 XmlDocument 만들기 C#

XML 파일은 다음과 같은 매우 복잡한 스키마, 뭔가가 있습니다

<?xml version="1.0" encoding="UTF-8"?> 
<Results> 
    <Result> 
     <WorkorderId>45</WorkorderId> 
     <WorkerId>13</WorkerId> 
     <DeviceId>38954178</DeviceId> 
     <Latitude>45.234</Latitude> 
     <Longitude>19.54</Longitude> 
     <Note>[all is good]</Note> 
     <Operations> 
      <Operation> 
       <OperationId>23</OperationId> 
       <Result>Success</Result> 
       <ParsedInformation> 
        <Info>parsed data</Info> 
        <Info>more parsed data</Info> 
       </ParsedInformation> 
      </Operation> 
      <!-- more operations ... --> 
     </Operations> 
    </Result> 
    <!-- more results ... --> 
</Results> 

내가 이런 된 XmlDocument를 만들 얼마나 궁금를, 그래서 그것을에 결과를 기록 할 수 있습니다? 프로젝트의 어딘가에서 스키마를 하드 코딩하는 것에 대한 "우수 사례"가 있습니까?

추가 정보/문학을 매우 환영 할 수 있도록 Xml을 처음 사용합니다.

답변

0

제 지식에 따르면 노드별로 문서 노드를 만들어야합니다. 아마도 빈 트리를 템플릿으로 저장할 수 있습니다.

1

문서 형식에 대한 XML 스키마가 실제로있는 경우 xsd.exe 유틸리티를 사용하여 XmlSerializer 호환 클래스를 생성 할 수 있습니다. 요소는 클래스가되고 속성과 자식은 속성이되고 요소 시퀀스는 컬렉션이됩니다. , 등등. 스키마에 정의 된 유형 (예 : xs:int)이 int이되는 한 올바른 유형을 얻을 수도 있습니다. 그런 다음 해당 클래스를 사용하여 메모리에 오브젝트 트리를 빌드하고 XmlSerializer을 사용하여 직렬화 할 수 있습니다.

3

일반적으로 데이터가 포함될 클래스 집합을 만들고 적절한 XmlSerializer 특성을 사용하여 태그를 지정하여 예상 한 형식으로 serialize되도록합니다. 귀하의 경우에는 http://msdn.microsoft.com/en-us/library/2baksw0z(VS.85).aspx

다음과 같은 클래스를 것 (검증되지 않은) :

XmlSerializer serializer = new XmlSerializer(typeof(Results)); 
StringBuilder sb = new StringBuilder(); //this will contain the xml 
serializer.Serialize(new TextWriter(sb), resultsObj); 

:

[XmlRoot("Results")] 
public class Results 
{ 
    List<Result> results = new List<Result>(); 

    [XmlElement("Result")] 
    List<Result> Results {get{return results;}} 
} 

public class Result 
{ 
    List<Operation> operations = new List<Operation>(); 
    int WorkorderId {get; set;} 
    .... other fields 
    string Note{get;set;} 
    List<Operation> Operations {get{return operations;}} 
} 

public class Operation 
{ 
    List<string> parsedInformation = new List<string>(); 
    int OperationId {get;set;} 
    .... 
    [XmlArray("ParsedInformation")] 
    [XmlArrayItem("Info")] 
    List<string> ParsedInformation{get{return parsedInformation;}} 
} 

나중에 XML로 직렬화 할 XmlSerializer 클래스를 사용하여이 꽤 좋은 자원이다 분명히 문자열에서 객체로 데이터를 deserialize 할 수도 있습니다.

xml에 대한 XSD 스키마가있는 경우 xsd.exe 도구를 사용하여 코드를 생성 할 수 있습니다.

관련 문제