2014-03-12 100 views
0

我們如何使用LINQ以新值更新節點名稱?如何使用LINQ更新XML節點?

<test xmlns="http://www.mydomain.com/test/xyz" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"> 
    <Ribbon1>test</Ribbon1> 
    <Ribbon2>test</Ribbon2> 
</test> 

我試圖如下:

var query = from lst in XElement.Load(fileLoc).Elements(ns + "Ribbon1") 
      select lst.FirstNode ; 

下面的代碼現在工作:

XNamespace ns = @"http://www.mydomain.com/test/xyz"; 
XElement xElement = XElement.Load(fileLoc); 
foreach (XElement descendant in xElement.Descendants(ns + "Ribbon1")) 
    descendant.Value = "Borra"; 
xElement.Save(fileLoc); 
+1

問題要求代碼必須展示對正在解決的問題的最低限度的理解。包括嘗試解決方案,爲什麼他們沒有工作,以及預期的結果。另請參閱:[堆棧溢出問題清單](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist)。 – Jonesopolis

回答

2

代碼中使用Elemnts,只有着眼於給定的水平。要找到的東西在任意級別:

//XElement.Load(fileLoc).Elements(ns + "Ribbon1") 
XElement.Load(fileLoc).Descendants(ns + "Ribbon1") 

還是要堅持結構:

XElement.Load(fileLoc).Element(ns + "test").Elements(ns + "Ribbon1") 

小心元素()和元素()

+0

我們如何更新價值? –

+0

foreach(XElement.Load(fileLoc).Descendants(「Ribbon1」)中的var後代) { descendant.Value =「Borra」; } 但它不起作用 –

+0

接受是否意味着您找到了答案?您也可以使用更新發布自己的答案。我沒有太多時間。 –

1
XNamespace ns = @"http://www.mydomain.com/test/xyz"; 
    XElement xElement = XElement.Load(fileLoc); 
    foreach (XElement descendant in xElement.Descendants(ns + "Ribbon1")) 
     descendant.Value = "Borra"; 
    xElement.Save(fileLoc);