通过在特定位置插入新元素来复制xml文件 - C#

时间:2010-05-07 12:40:32

标签: c# xml xmldocument xmlreader xmlwriter

您好我想要复制一个xml文件并在特定元素中插入更多元素; 这样做的最好和最简单的方法是什么。我可以使用xmlReader读取元素并逐个引用每个类型 - 我有一些问题,但除此之外我觉得太过分了,可以用某种方式做得更好。 在下面的示例中,我将xml作为默认定义需要以相同的格式创建一个新的xml,并将新值插入到sheet1中 - 但是在现有行之后,并对sheet2执行相同的操作。

<book>
   <Sheet ss:name="Sheet1">
      <Table >
      <Row >
        <Cell/>
        <Cell>
             Title Name      
        </Cell>
        <Cell >
             Title Description
         </Cell>
      </Row>
   </Sheet>
<a/>
<b/>
  <Sheet ss:name="Sheet2">
      <Table >
      <Row >
        <Cell/>
        <Cell>
             Title Name      
        </Cell>
        <Cell >
             Title Description
         </Cell>
      </Row>
   </Sheet>
</book>

1 个答案:

答案 0 :(得分:7)

我视图中的最简单的方式是使用LINQ to XML加载整个文档,修改它,然后再将其保存。这可能比使用XmlReader更容易,根据我的经验,这可能会有点毛茸茸。

然而,这确实涉及将其全部加载到内存中 - 如果文档很大,这可能是一个问题。这可能是个问题吗?

编辑:这是LINQ to XML(未经测试)的简短示例:

XDocument doc = XDocument.Load("test.xml");
XNamespace ss = "http://url/for/ss";
Sheet sheet1 = doc.Descendants("Sheet")
                  .Where(x => (string) x.Attribute(ss + "name") == "Sheet1");
XElement lastRow = sheet1.Elements("Row").LastOrDefault();
// Note: if there aren't any rows, lastRow will be null here. Handle accordingly
lastRow.AddAfterSelf(new XElement("Foo", "Extra value"));

最后一部分的替代方案,如果您只想在工作表的所有旧内容之后使用新内容:

sheet1.Add(new XElement("Foo", "Extra value"));