Linq to XML在每个节点的XML中插入一个新元素

时间:2012-11-06 22:56:35

标签: vb.net linq-to-xml

我想在以下XML中为数据节点的每个实例插入一个新元素

以下是我的初始XML:

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

这是我想要实现的XML

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

使用以下Linq将XML数据用作DataGrid的数据源。

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

在VB.net中写这个,但C#的答案还可以。感谢。

2 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分:0)

如果您希望在处理之前将newValue添加到XML中,您可以执行以下操作:

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

其中xmlXDocument,从您的网络服务加载。