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

use*_*077 2 c# xml xmldocument xmlwriter xmlreader

嗨,我想复制一个xml文件,并插入一个特定的元素locaiton更多的元素; 这样做的最好和最简单的方法是什么.我可以使用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>
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 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"));
Run Code Online (Sandbox Code Playgroud)

如果您只想在工作表的所有旧内容之后使用新内容,则可以替换最后一部分:

sheet1.Add(new XElement("Foo", "Extra value"));
Run Code Online (Sandbox Code Playgroud)