Xml没有正确生成

时间:2012-03-24 07:57:06

标签: c# 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 个答案:

答案 0 :(得分: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在内存中构建文档然后在最后写出来会更简单。