使用C#中的XMLWriter类附加到XML文件

时间:2014-01-28 11:40:25

标签: c# xml xmlwriter

我有一个创建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>

任何人都可以告诉我应该在我的代码中更改什么,这样当我再次使用这三个参数调用该方法时,它将以相同的格式附加到此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>

3 个答案:

答案 0 :(得分:0)

您想要的结果不是格式良好的XML文档,因为XML文档可能只有一个根元素。

但是,如果这是您想要的(即,而不是XML文档,您需要包含XML片段的文本文档),您可以尝试以下操作:

  • 将现有文件作为FileStream
  • 打开
  • 寻找文件的末尾
  • 将FileStream传递给XmlWriter构造函数
  • 附加您想要的元素

答案 1 :(得分:0)

您可以通过将字符串List作为参数传递给函数来实现此目的。为了你的帮助,我完成了完整功能的编码。如果这对您有用,请告诉我。看看这个

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();
    }

注意:在调用函数之前,可能必须将所有参数值添加到List中。

答案 2 :(得分:0)

我使用了一些代码,使用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());
}