C# 在C中使用XMLWriter类追加到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

我有一个创建xml文件的方法,这个方法经常从其他类调用。我已经向这个方法发送了三个参数,在编写xml文件时,我需要将这三个参数附加到xml文件中。这是我的代码片段

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可以做到这一点。