2010-11-22 35 views
2

我正在爲一個簡單的過程添加跟蹤,這個過程是作爲一個.exe生成的,並在調度程序中設置爲每10分鐘運行一次。我想讓應用程序將結果輸出到一個xml文件中。如何在c#中添加一個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

您已經擁有了大部分解決方案 - 您正在創建節點將它們添加並保存。如果如何從文件讀取是真正的問題,我建議您查看MSDN上的XmlDocument的構造函數重載。 – annakata 2010-11-22 14:53:15

回答

2

您不能附加XML文件 - 您必須在內存中加載文件,修改/添加/ etc,然後將其寫入磁盤。

編輯:

好,把文件加載可以使用:

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

,然後開始添加保活的東西。

我真的會走得更遠一點,而不是亂七八糟的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列表並序列化並再次保存到磁盤。

谷歌有很多資源,所以只需要搜索一下那些。

+0

我可以看到一個代碼塊,它會將文件加載到xmlDoc中,然後使用我的代碼的其餘部分來追加節點,但是如果文件不存在,那麼現在加載一個新的文檔。我的問題是現在我失去了每次運行的所有歷史記錄,因爲它每次都會覆蓋文件,並且由於它不加載和追加節點,我失去了所有的歷史信息。 – kacalapy 2010-11-22 15:00:49

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")); 
    } 
+0

對於在XmlDocument上使用XDocument +1。這是一個非常友好的課程。 – jlafay 2010-11-22 15:58:42

相關問題