2012-07-23 68 views
0

這一直使我瘋狂的一整天。我有一個xdocument,只是想改變一個值。LINQ to XML - 修改

XML看起來如下

<session> 
    <immediate> 
<pivot name="test"> 
    <axes> 
    <axis position="SLICERS"> 
     <attribute name="Book"> 
     <selection value="Book_Name" type="Book" /> 
     </attribute> 
     <attribute name="Result Namespace"> 
     <selection value="blah blah" /> 
     </attribute> 
     <attribute name="Date"> 
     <selection value="2012-05-16" /> 
     </attribute> 
     <attribute name="Measure"> 
     <selection value="123" /> 
     </attribute> 
    </axis> 
    <axis position="SIDE"> 
     <attribute name="ttx" mode="ALL"></attribute> 
    </axis> 
    <axis position="TOP"> 
     <attribute name="hhy" mode="ALL"></attribute> 
    </axis> 
    </axes> 
    <source name="risk" /> 
    <aggregate expression="SUM(Money Value)" /> 
    <grid-processor name="errors" /> 
</pivot> 
    </immediate> 
</session> 

我想要做的就是簡單地改變

<attribute name="Book"> 
     <selection value="Book_Name" type="Book" /> 
</attribute> 

<attribute name="Book"> 
    <selection value="CorrectBookName" type="Book" /> 
</attribute> 

我想使用LINQ和曾嘗試的XElement - 我可以得到該塊,但不能更新

 XElement amend = xdoc.Descendants("attribute").First(el => (String)el.Attribute("selection") == "value"); 

任何人有什麼想法?

回答

0

您需要使用XElement.SetAttributeValue()方法。只需選擇要更改其屬性的元素並在其上調用SetAttributeValue()即可。如果沒有與您提供的名稱相關的屬性,將會創建一個新屬性,否則現有屬性的值將被替換爲新屬性。看看msdn更多的例子和更多細節:http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement.setattributevalue.aspx

+0

我一直在嘗試。 amend.SetAttributeValue(「value」,「CorrectBookName」); 導致 <屬性名= 「書」 的值= 「CorrectBookName」> <選擇值= 「BOOK_NAME」 類型= 「書層次」/> – user1156000 2012-07-23 15:24:30

+0

忽略因 - 根據需要來選擇一個新的水平 的XElement修改= xdoc.Descendants(「selection」)。First(el =>(String)el.Attribute(「type」)。Value ==「Book Hierarchy」); – user1156000 2012-07-23 15:26:34