JakeJacobsen
JakeJacobsen

Reputation: 52

Linq to XML Insert a new element into the XML for each node

I would like to insert a new element in the following XML for each instance of a data node

Here is the initial XML that I have:

<dataCollection totalCount="12" pageCount="1">
    <data>
        <date>2011-11-10T00:00:00.000-05:00</date> 
        <dataType>PRCP</dataType> 
        <station>GHCND:USW00014739</station> 
        <value>267</value> 
        <address>
            <home>X</home> 
        </address>
    </data>
    <data>
        <date>2011-11-10T00:00:00.000-05:00</date> 
        <dataType>PRCP</dataType> 
        <station>GHCND:USW00014739</station> 
        <value>267</value> 
        <address>
            <home>X</home> 
       </address>
    </data>
</dataCollection> 

And this is the XML I am trying to achieve

<dataCollection totalCount="12" pageCount="1">
    <data>
        <date>2011-11-10T00:00:00.000-05:00</date> 
        <dataType>TMIN</dataType> 
        <station>GHCND:USW00014739</station> 
        <value>267</value> 
        <newValue>60</newValue>  
        <address>
            <home>X</home> 
        </address>
    </data>
    <data>
        <date>2011-11-10T00:00:00.000-05:00</date> 
        <dataType>TMAX</dataType> 
        <station>GHCND:USW00014739</station> 
        <value>270</value>
        <newValue>62</newValue>  
        <address>
            <home>X</home> 
        </address>
    </data>
</dataCollection> 

The XML data is used as a data source for a DataGrid using the following Linq.

Dim elements = (From daDsc In xdoc.Descendants("data") _
            Select Data_Type = daDsc.Element("dataType").Value, _
            Raw_Value = daDsc.Element("value").Value,
            newValue = daDsc.Element("newValue"))

Writing this in VB.net, but answers in C# is OK. Thanks.

Upvotes: 1

Views: 1383

Answers (2)

Enigmativity
Enigmativity

Reputation: 117064

Try this:

foreach (var xe in xml.Descendants("data"))
{
    xe.Element("value")
        .AddAfterSelf(new XElement("newValue", 42));
}

Upvotes: 1

Victor Zakharov
Victor Zakharov

Reputation: 26424

If you wish to add newValue into your XML before processing, you could do something like this:

For Each element As XElement In xml.Elements
  element.SetElementValue("newValue", "something")
Next

where xml is an XDocument, loaded from your web service.

Upvotes: 0

Related Questions