如何使用LINQ更新XML节点?

时间:2014-03-12 12:28:19

标签: c# linq

我们如何使用LINQ使用新值更新节点名称?

<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);

2 个答案:

答案 0 :(得分:2)

您的代码使用Elemnts并且仅查看给定级别。要找到任意级别的东西:

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

或坚持结构:

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

注意Element()和Elements()

答案 1 :(得分: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);