如何在c#中附加xml文件?

时间:2010-11-22 14:49:27

标签: c# .net xml

我正在为审计目的添加跟踪,这个过程我已经构建为.exe并在调度程序中设置为每10分钟运行一次。我想让应用程序将结果输出到xml文件中。

如果文件存在,则打开并向其附加数据,如果它不存在,我想创建一个新的xml文件,该文件将在下次运行时保留并使用。

现在是我的代码,我需要添加什么,如何打开xml文件(在c:/file.xml上)并使用它来追加节点?

static void Main(string[] args)
{
    XmlDocument doc = new XmlDocument();

    XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", null, null);
    doc.AppendChild(dec);// Create the root element

    XmlElement root = doc.CreateElement("STATS");
    doc.AppendChild(root);

    XmlElement urlNode = doc.CreateElement("keepalive");
    urlNode.SetAttribute("runTime", DateTime.Now.ToString());

    try
    {
        WebProxy wp = new WebProxy("http://proxy.ml.com:8083/");
        WebClient w = new WebClient();
        w.Proxy = wp;

        if (w.DownloadString("http://wwww.example.com") != "")
            urlNode.SetAttribute("result", "UP");
        else
            urlNode.SetAttribute("result", "DOWN");
    }
    catch
    {
        urlNode.SetAttribute("result", "DOWN");
    }
    finally
    {
        root.AppendChild(urlNode);
        doc.Save("c:/keepAlive.xml");
    }
}

2 个答案:

答案 0 :(得分:2)

您无法附加XML文件 - 您必须将文件加载到内存中,修改/添加/等,然后将其写入磁盘。

编辑:

好吧,加载文件你会使用:

XmlDocument xmlDoc= new XmlDocument(); // create an xml document object.
if(System.IO.File.Exists("yourXMLFile.xml")
    xmlDoc.Load("yourXMLFile.xml");// load from file
else{
   // create the structure of your xml document
   XmlElement root = xmlDoc.CreateElement("STATS");
   xmlDoc.AppendChild(root);
}

然后开始添加keepalive内容。

我实际上会更进一步,而不是乱用xml。我将创建一个包含我需要的所有内容的类,并对其进行序列化和反序列化。

喜欢这样:

[XmlRoot]
public class Stats{
  public Stats(){}
  public IList<StatsItem> Items{get;set;} 
}

public class StatsItem{
  public StatsItem(){}     

  public string UrlName{get;set;}
  public DateTime Date{get;set;}
}

现在只是序列化这个,你有你的xml文档。到时候,反序列化它,将东西添加到Items列表中并序列化并再次将它保存到磁盘。

谷歌上有很多资源,所以只需搜索一下。

答案 1 :(得分:2)

using System;
using System.Xml.Linq;
using System.Xml.XPath;

...

public void Append(){
    XDocument xmldoc = XDocument.Load(@"yourXMLFile.xml"));
    XElement parentXElement = xmldoc.XPathSelectElement("yourRoot");
    XElement newXElement = new XElement("test", "abc");

    //append element
    parentXElement.Add(newXElement);

    xmldoc.Save(@"yourXMLFile.xml"));
  }