2012-03-24 23 views
0

なぜこのXMLが正しく生成されていないのかわかりません。ここでXmlが正しく生成されていません

は私のXMLが生成されている:

<?xml version="1.0"?> 
    <schedules> 

     <schedule> 
     <Name>Schedule0</Name> 

     <Task 0> 
     <description>task0 description</description> 
     <done>true</done> 
     </Task 0> 

     <Task 1> 
     <description>task1 description</description> 
     <done>true</done> 
     </Task 1> 
     </schedule> 

    <schedule> 
     <Name>Schedule1</Name> 
     <Task 0> 
     <description>task0 description</description> 
     <done>true</done> 
     </Task 0> 

     <Task 1> 
     <description>task1 description</description> 
     <done>true</done> 
     </Task 1> 
    </schedule> 

    <schedule> 
     <Name>Schedule2</Name> 
     <Task 0> 
     <description>task0 description</description> 
     <done>true</done> 
     </Task 0> 

     <Task 1> 
     <description>task1 description</description> 
     <done>true</done> 
     </Task 1> 
    </schedule> 

    <schedule> 
    <Name>Schedule3</Name> 
    <Task 0> 
    <description>task0 description</description> 
    <done>true</done> 
    </Task 0> 

    <Task 1> 
    <description>task1 description</description> 
    <done>true</done> 
    </Task 1> 
    </schedule> 

    <schedule> 
     <Name>Schedule4</Name> 
     <Task 0> 
     <description>task0 description 
     </description> 
     <done>true</done> 
     </Task 0> 

     <Task 1> 
     <description>task1 description</description> 
     <done>true</done> 
     </Task 1> 
    </schedu 

そして、私のC#コード:

 XmlTextWriter xmlwriter = new XmlTextWriter("mojixml",null); 

     xmlwriter.WriteStartDocument(); 
     xmlwriter.WriteStartElement("schedules"); 

     for (int i = 0; i < 5; i++) 
     { 
      xmlwriter.WriteStartElement("schedule"); 
      xmlwriter.WriteElementString("Name", "Schedule"+i.ToString()); 

      for (int ii = 0; ii < 2; ii++) 
      { 
       xmlwriter.WriteStartElement("Task " + ii.ToString()); 
       xmlwriter.WriteElementString("description", "task"+ii+ " description"); 
       xmlwriter.WriteElementString("done", "true"); 
       xmlwriter.WriteEndElement(); 
      } 
      xmlwriter.WriteEndElement(); //schedule 
     } 

     xmlwriter.WriteEndElement(); //schedules 

     xmlwriter.WriteEndDocument(); 

私が5から3に外側のループ範囲を変更するときにも、それは(任意のXMLが表示されません空のファイル)。

+1

これはVisual Studioとは関係がありません。タグを削除します。 –

答えて

1

あなたはあなたの作家を決して閉じたり、洗い流したりすることはありません。あなたはプログラムの終わりに達しています。その時点で、バッファにXMLを持つ作家がいます。プログラムはただ終了します。ただ、例外があります場合でも、適切なストリームの処分、正しいことを行いますusing声明に入れる:しかし

using (XmlTextWriter xmlwriter = new XmlTextWriter("mojixml", null)) 
{ 
} 

、それは使用する方がまだだろうXmlWriter.Create

using (XmlWriter xmlwriter = XmlWriter.Create("schedules.xml")) 
{ 
} 

この時点で、あなたはそれでスペースで要素名を作成することなく、あなたの世代のコードを修正することも必要があります:

xmlwriter.WriteStartElement("Task " + ii.ToString()); 
// becomes... 
xmlwriter.WriteStartElement("Task" + ii.ToString()); 

はまた、すべてのカントーことに注意してくださいToStringへの呼び出しは不要です。コンパイラはそれを行うことができます。

最後に、巨大なファイルを作成していない限り、LINQ to XMLを使用してメモリにドキュメントを作成し、最後に書き出す方が簡単なことをお勧めします。

+0

ああ、たくさんありました。 – Mj1992

+0

なぜ 'mlWriter.Create'が良いですか? –

+0

@ジョンThnxの提案私は確かにこれらのことを念頭に置くでしょう。 – Mj1992

関連する問題