C# 在C中使用XMLWriter类追加到XML文件#
我有一个创建xml文件的方法,这个方法经常从其他类调用。我已经向这个方法发送了三个参数,在编写xml文件时,我需要将这三个参数附加到xml文件中。这是我的代码片段C# 在C中使用XMLWriter类追加到XML文件#,c#,xml,xmlwriter,C#,Xml,Xmlwriter,我有一个创建xml文件的方法,这个方法经常从其他类调用。我已经向这个方法发送了三个参数,在编写xml文件时,我需要将这三个参数附加到xml文件中。这是我的代码片段 XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; XmlWriter writer = XmlWriter.Create(@"E:\\log.xml", settings); wr
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter writer = XmlWriter.Create(@"E:\\log.xml", settings);
writer.WriteStartDocument();
writer.WriteStartElement("Log");
writer.WriteStartElement("Tests");
writer.WriteStartElement("Test");
writer.WriteAttributeString("Test", message);
writer.WriteElementString("DateAndTime", time);
writer.WriteElementString("Result", test);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
我得到了他的输出:
<?xml version="1.0" encoding="utf-8"?>
<Log>
<Tests>
<Test Test="LoginToAcrm">
<DateAndTime>2014-20-28 06:20:40</DateAndTime>
<Result>Passed</Result>
</Test>
</Tests>
</Log>
2014-20-28 06:20:40
通过
任何人都可以告诉我,我应该在代码中更改什么,以便当我再次使用这三个参数调用该方法时,它将以相同的格式附加到此xml文件,而不是覆盖以前的文件。事情会是这样的:
<?xml version="1.0" encoding="utf-8"?>
<Log>
<Tests>
<Test Test="LoginToAcrm">
<DateAndTime>2014-20-28 06:20:40</DateAndTime>
<Result>Passed</Result>
</Test>
</Tests>
<Tests>
<Test Test="LoginToProjectWithError">
<DateAndTime>2014-09-28 05:10:45</DateAndTime>
<Result>Failed</Result>
</Test>
</Tests>
<Tests>
<Test Test="LoginToProjectWithBlank">
<DateAndTime>2014-09-28 05:12:13</DateAndTime>
<Result>Passed</Result>
</Test>
</Tests>
</Log>
2014-20-28 06:20:40
通过
2014-09-28 05:10:45
失败
2014-09-28 05:12:13
通过
您想要的结果不是格式良好的XML文档,因为XML文档可能只有一个根元素
但是,如果这是您想要的(即,您想要的不是XML文档,而是包含XML片段的文本文档),则可以尝试以下操作:
- 将现有文件作为文件流打开
- 查找到文件末尾
- 将文件流传递给XmlWriter构造函数
- 附加所需的元素
void xmlwriter(List<string> message, List<string> time, List<string> test)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter writer = XmlWriter.Create(@"E:\\log.xml", settings);
writer.WriteStartDocument();
writer.WriteStartElement("Tests");
string[] arrayMessage = message.ToArray();
string[] arrayTime = time.ToArray();
string[] arrayTest = test.ToArray();
for (int i = 0; i < arrayMessage.Length; i++)
{
writer.WriteStartElement("Test");
writer.WriteAttributeString("Test", arrayMessage[i]);
writer.WriteElementString("DateAndTime", arrayTime[i]);
writer.WriteElementString("Result", arrayTest[i]);
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
}
void xmlwriter(列表消息、列表时间、列表测试)
{
XmlWriterSettings=新的XmlWriterSettings();
settings.Indent=true;
XmlWriter=XmlWriter.Create(@“E:\\log.xml”,设置);
writer.WriteStartDocument();
WriteStarteElement(“测试”);
字符串[]arrayMessage=message.ToArray();
字符串[]arrayTime=time.ToArray();
字符串[]arrayTest=test.ToArray();
for(int i=0;i
注意:在调用函数之前,可能必须将所有参数值添加到列表中 我使用了一些您的代码,使用
StringBuilder
创建XmlWriter
,最后使用StreamWriter
编写该字符串
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
StringBuilder sb = new StringBuilder();
XmlWriter writer = XmlWriter.Create(sb, settings);
writer.WriteStartDocument();
writer.WriteStartElement("Tests");
writer.WriteStartElement("Test");
writer.WriteAttributeString("Test", message);
writer.WriteElementString("DateAndTime", time);
writer.WriteElementString("Result", test);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"E:\\log.xml", true))
{
file.Write(sb.ToString());
}
我总是发现使用类更容易您的最后一个示例看起来像XML,但实际上不是。XML只能有一个根元素。因此,不要期望XML工具能够生成“不完全”的XML。我已经编辑了我的代码并重新创建了xml文件。这几乎总是会导致一个后续问题:“为什么我的另一段代码/工具不能读取此xml?”@Damien_the_unsiver,没错,但偶尔也有理由创建一个包含一系列xml片段的文本文件。例如,当配置为使用LoggingXmlLayout时,log4net可以做到这一点。