2014-02-27 31 views
1

我有一個.XML文件看起來像以下:基於相鄰孩子有選擇地更新XML子元素值元素值

<Compliance_Items> 
    <Compliance_Item> 
    <Application_Name>Notepad++</Application_Name> 
    <Installed_Version>6.5.3</Installed_Version> 
    <Required_Version>6.5.4</Required_Version> 
    <Detected_Missing_Date-UTC>2/27/2014 7:53:17 AM</Detected_Missing_Date-UTC> 
    <Detected_Missing_Date-LocalTime>2/26/2014 11:53:17 PM</Detected_Missing_Date- LocalTime> 
    <Used_Deferrals>1</Used_Deferrals> 
    </Compliance_Item> 
    <Compliance_Item> 
    <Application_Name>VLC media player 2.1.3</Application_Name> 
    <Installed_Version>2.1.3</Installed_Version> 
    <Required_Version>2.1.4</Required_Version> 
    <Detected_Missing_Date-UTC>2/27/2014 7:53:18 AM</Detected_Missing_Date-UTC> 
    <Detected_Missing_Date-LocalTime>2/26/2014 11:53:18 PM</Detected_Missing_Date- LocalTime> 
    <Used_Deferrals>1</Used_Deferrals> 
    </Compliance_Item> 
</Compliance_Items> 

我遍歷,應用程序名稱的列表,向用戶呈現一個「升級或延期「提示。如果他們推遲,我會增加一個計數器。該計數器需要被寫回.XML(即<Used_Deferrals>1</Used_Deferrals>應該成爲<Used_Deferrals>2</Used_Deferrals>

我可以通過每個子元素組的foreach,尋找在那裏element.name我目前正在處理的應用程序的名稱相匹配,但從那裏,我不知道如何選擇相鄰的子元素,這樣我可以更新它的值

+1

爲什麼不將XML反序列化爲相應的Class文件?修改實例並將序列化流寫入XML。 – Abhinav

回答

0

使用XDocument的LINQ to XML類:

var xDoc = XDocument.Parse(...); 
var elementToUpdate = xDoc.Root 
          .Descendants("Compliance_Item") 
          .Single(ci => ci.Element("Application_Name").Value == "Notepad++") 
          .Element("Used_Deferrals"); 
elementToUpdate.Value = (Int32.Parse(elementToUpdate.Value) + 1).ToString(); 

但是,如果你打算多一些對結構的複雜操作,它確實可能對follo有用w @ Abhinav的建議並在處理之前對XML進行反序列化。