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:intintとなります)。次に、それらのクラスを使用してメモリー内にオブジェクト・ツリーを構築し、XmlSerializerを使用してそれを直列化することができます。

3

通常、データを含むクラスのセットを作成し、適切なXmlSerializer属性でタグ付けして、期待しているフォーマットにシリアル化されるようにします。あなたは以下のクラス(未テスト)を持っているでしょうあなたのケースではhttp://msdn.microsoft.com/en-us/library/2baksw0z(VS.85).aspx

:これはかなり良いリソースです

[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クラスを使用します。

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

明らかに、文字列からオブジェクトにデータを逆シリアル化することもできます。

xml用のXSDスキーマがある場合は、xsd.exeツールを使用してコードを生成できます。

関連する問題