2

嗨,我想复制一个 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>
4

1 回答 1

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"));
于 2010-05-07T12:43:14.223 回答