我正在为审计目的添加跟踪,这个过程我已经构建为.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");
}
}
答案 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"));
}