嘿,我无法弄清楚为什么没有正确生成这个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(空文件)。
答案 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在内存中构建文档然后在最后写出来会更简单。