2013-07-23 19 views
0

好吧,所以我遇到了一個與我的工作的約束。我有一個xml文檔,我正在嘗試更改。每次文件下載時,該值都必須更改。所以基本上當文件A完成下載version.xml時有一個我想從「0」更改爲「1」的ID。現在,我終於可以按照我想要的方式設置我的發射器,並將其放在我的代碼中。用c增加一個xml#

private void GetNextNodeID() 
    { 
     XmlDocument doc = new XmlDocument(); 
     doc.Load(@"version.xml"); 
     var x = doc.GetElementsByTagName("Product"); 
     int Max = 0; 



     Max++ 
     XmlElement newElement = doc.CreateElement("Product"); 
     newElement.SetAttribute("id", Max.ToString()); 

     doc.Save(@"version.xml"); 

    } 

也在這裏是XML文檔

<Table> 
<Product> 
<Product>0</Product> 
<Product_name>Vitare</Product_name> 
<Product_version>1.0.0.1</Product_version> 
</Product> 
</Table> 

現在,出於某種原因,代碼永遠不會與xml文件弄亂請幫我弄清楚如何遞增值!!!!!!!! !

謝謝,德文Magaro

+2

你給出的代碼甚至沒有*編譯* ... –

+0

@Devin Magaro在'Max ++'之後有一個缺失';' –

+0

我使用了jon雙向給我的東西,它給了我一個未處理的異常類型'System.Reflection.TargetInvocationException'在mscorlib.dll中發生 附加信息:調用的目標引發了異常。 –

回答

2

目前正在使用的文檔創建一個新的元素,但實際上從未將它添加到文檔中。您還試圖設置一個屬性,此前您的文本位於元素本身內。

假設你真的只是想更新的元素,我個人使用LINQ到XML,而不是XmlDocument

var doc = XDocument.Load("version.xml"); 
// Single() ensures there's only one such element 
var element = doc.Descendants("Product").Single(); 
int currentValue = (int) element; 
element.SetValue(currentValue + 1); 
doc.Save("version.xml"); 

如果要更新所有Product元素,你應該遍歷doc.Descendants("Product")foreach循環。

+0

現在,當我運行的代碼和我的下載完成時,我得到一個錯誤mscorlib.dll 發生類型'System.Reflection.TargetInvocationException'的未處理的異常其他信息:異常已被調用的目標引發。它發生在即時調用私人空間從下載完成 –

+0

它也指向Application.Run(新form1());當錯誤彈出 –

+0

@Devin Magaro你的問題與Jon Skeet的代碼沒有任何關係,但顯然你試圖在WinForms上顯示這些數據。 [你可以看看@ this](http://stackoverflow.com/questions/3182675/application-runnew-form1-giving-error)。另一方面,Jon的代碼不能與你提供的XML文件一起工作,你可能會遇到像'Sequence含有多個元素一樣的錯誤',因爲你定義了兩次''標籤。嘗試賦予外標籤另一個名稱(如''。 –