插入XML节点和内部节点到现有的XML文档中的C#

问题描述:

目前我有工作作为工作C#程序如下:插入XML节点和内部节点到现有的XML文档中的C#

  1. 接受值的.xls模板(XLS是由用户手动创建)
  2. 保存值(匹配字段)到数据库
  3. 转换和写入的.xls到XML。请参考下面的示例输出:

    Existing XML Structure

现在,我想要做的是:

  1. 读取现有的XML(创建的XML)
  2. 插入另一组节点和子节点(ReleaseLine和子节点)。它必须接受多个ReleaseLine。
  3. 用附加节点保存/创建新的xml。请参阅以下的输出:

    This is what I'm looking for:

我现有的C#程序很简单,但XML节点和层次是血腥深。我刚刚使用new XElement方法创建了C#代码,并为每个节点传递值。然后我简单地使用xmlDocument.Save()方法来编写xml。

[现有XML方案] [3]

我找到了我的问题的答案,这里是链接http://www.xmlplease.com/add-xml-linq 使用XPathSelectElement方法,我能够找到正确的节点并附加了新的XElement块。

要添加节点或附加在现有的XML数据我倒是使用LINQ XML内容。

XElement xml = XElement.Load("file.xml"); 

     xml.Add(new XElement("uberNode", 
     new XElement("childNode", content), 
     new XElement("anotherChildNode", content))); 
     xml.Save("file.xml"); 

Here是一些其他相关的解决方案。

添加到特定节点(例如带):

继exisiting XML数据:

`<Names> 
    <Name> 
    <prename>John</prename> 
    <lastname>Snow</lastname> 
    </Name> 
    <Name> 
    <prename>Harry</prename> 
    <lastname>Harry</lastname> 
    </Name> 
</Names>` 

现在我想第一个 “女士prename” 前添加 “年龄” - 标记 - 标签和“家庭” - 标签后的第一个“姓氏”标签。

XElement xml = XElement.Load("file.xml"); 

      var childrens = xml.DescendantsAndSelf().ToArray(); 
      var first_prename = childrens[2]; 
      var first_lastname = childrens[3]; 
      Console.WriteLine(childrens[0]); //prints out the whole content 

      first_prename.AddBeforeSelf(new XElement("age", 22)); 

     first_lastname.AddAfterSelf(new XElement("family", new XElement("mother", "paula"), new XElement("father", "paul"))); 

     xml.Save("file.xml"); 

结果:

`<Names> 
    <Name> 
    <age>22</age> 
    <prename>John</prename> 
    <lastname>Snow</lastname> 
    <family> 
     <mother>paula</mother> 
     <father>paul</father> 
    </family> 
    </Name> 
    <Name> 
    <prename>Harry</prename> 
    <lastname>Harry</lastname> 
    </Name> 
</Names>` 

我面临的问题和LINQ给了我实现这一目标的最简单的办法! 也有其他类似的方式,例如here。但我尝试了更多,DescendantsAndSelf()让我更容易通过。

+0

感谢您的快速回复。我尝试了下面的代码来在ReleaseLine节点内插入新的节点集合,但是它被插入到XML的根节点。如何将新节点插入到正确的子节点?这是我的代码。再次感谢你的帮助。

+0

我编辑了我的最后一个答案。而且我也要谢谢你,因为我现在必须解决这个问题! - – Stophane

+0

工程就像一个魅力,谢谢Stophano。我使用xml.Descendants()方法,但您提供的解决方案有很多帮助,再次感谢,欢呼! –