oldsport oldsport - 3 months ago 28
C# Question

C# How to change Xml node values using Linq

How can I replace the node value

some value
with another value using Linq.
Finally I need a string with the replaced value.

Xml:

<ROOT>
<A>
<A1>
<elementA1></elementA1>
</A1>
<A2>
<elementA2>some value</elementA2>
</A2>
</A>
</ROOT>


C#:

XDocument xDoc = XDocument.Parse(@"<ROOT>
<A>
<A1>
<elementA1></elementA1>
</A1>
<A2>
<elementA2>Some value</elementA2>
</A2>
</A>
</ROOT>");

xDoc.Elements("ROOT")
.Elements("A")
.Elements("A2")
.Elements("elementA2")
.Select(e => e.Value).ToList().ForEach(e => /* change the value */);

Answer

You can use the XPathSelectElement method for this:

var newValue = "New value";

var xDoc = XDocument.Parse(@"<ROOT>
    <A>
        <A1>
            <elementA1></elementA1>
        </A1>
        <A2>
            <elementA2>Some value</elementA2>
        </A2>
    </A>
</ROOT>");

xDoc.XPathSelectElement("/ROOT/A/A2/elementA2").SetValue(newValue);
Comments