2012-11-06 62 views
1

我想在下面的XML插入一个新的元件,用于一个数据节点LINQ到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> 

这就是我想实现

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

的XML数据是使用XML d作为使用以下Linq的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#中的答案是确定的。谢谢。

+0

我们怎么知道把什么样的价值在'newValue'元素为每个'data'元素? – Enigmativity

+0

您是否正在尝试'Load' xml,将其更改 - 在每个'data'节点下添加'newValue' - 然后将您提供的查询用作数据源?这意味着新的XML是不稳定的,并且不保存在任何地方? – Neolisk

+0

@JakeJacobsen - 您需要使用“@”符号来确保您要回复的人获得通知。我回来看看这个问题,真是幸运。 – Enigmativity

回答

1

试试这个:

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

特别+1为42. :) – Neolisk

+1

@Neolisk - 谢谢。我想用一个“有意义”的价值。 – Enigmativity

+0

@Enigmativity是的,工作!万分感谢。为了完整起见,下面是VB.net中的解决方案:对于xdoc.descendants中的每个xe元素(“data”) xe.Element(“value”)。AddAfterSelf(New XElement(“newValue”,42)) Next ' – JakeJacobsen

0

如果你想添加到newValue处理之前你的XML,你可以做这样的事情:

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

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