在C#中将XML节点和内部节点插入现有XML文档

时间:2015-12-15 05:58:41

标签: c# xml nodes

目前我有一个有效的C#程序,其工作原理如下:

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

    Existing XML Structure

  4. 现在,我想做的是:

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

      This is what I'm looking for:

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

      [现有XML程序] [3]

2 个答案:

答案 0 :(得分:0)

要在现有xml-data中添加节点或附加内容,请使用Linq to 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是其他一些相关的解决方案。

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

现有的XML数据:

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

现在我想在第一个“prename”-tag之前添加“age”标签,在第一个“lastname”-tag之后添加“family”标签。

  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()使我更容易通过。

答案 1 :(得分:0)

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