2014-03-03 127 views
-1

嗯,我得到了XML這樣的:C#修改特定的節點XML,並刪除所有節點具有相同的屬性

<?xml version="1.0" encoding="UTF-8" standalone="true"?> 
<!--Alert notes--> 
<Aletrs> 
    <Alert> 
     <Name>Counter</Name> 
     <Value>0</Value> 
    </Alert> 
    <Alert> 
     <ID>1</ID> 
     <Name>02:46:10 - Alert ID.1 nr.1 Camera1 - photo</Name> 
     <Value>Capture/Images/Camera1_snapshoot_nr1-2014-03-02_02-46-10.png</Value> 
    </Alert> 
    <Alert> 
     <ID>1</ID> 
     <Name>02:46:11 - Alert ID.1 nr.2 Camera1 - photo</Name> 
     <Value>Capture/Images/Camera1_snapshoot_nr2-2014-03-02_02-46-11.png</Value> 
    </Alert> 
</Alerts> 

起初,我需要幫助在Counter名警報節點修改值數,我得到的代碼是如何得到這個值,但我沒把它修改成變化值並保存修改後的XML:

string index = (from xml2 in dailyXML.Descendants("Alert") 
        where xml2.Element("Name").Value == "Counter" 
        select xml2.Element("Value").Value).FirstOrDefault(); 

而且我需要在代碼幫助刪除具有相同值的「警報」節點< ID>..< /ID>

+0

首先'Alert'節點沒有id。可以嗎?此外,它會很高興看到您預期產生的xml –

+0

是的,它只保留用於警報ID的數字,例如,如果有ID = 1的警報,計數器值將是1.如果將是另一個警報與下一個警報ID = 2,計數器= 2. – DanielSz

+0

對不起,沒有得到你的意思 –

回答

0
var xDoc = XDocument.Load(filename); 

/*1*/ 
var value = xDoc.Descendants("Alert") 
      .FirstOrDefault(a => a.Element("Name").Value == "Counter") 
      .Element("Value"); 
value.Value = "1"; 


/*2*/ 
foreach(var alert in xDoc.Descendants("Alert") 
         .GroupBy(a => (string)a.Element("ID"))) 
{ 
    alert.Skip(1).ToList().ForEach(x => x.Remove()); 
} 
+0

嘿,第一個工作perfetly!不幸的是第二不..它沒有刪除所有節點具有相同的價值在,也在哪裏申報哪個ID號他不得不刪除? – DanielSz

+0

@DanielSz它適用於您發佈的示例xml。如果你用另一個測試它,然後張貼它。 –

相關問題