您好我想要复制一个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>
答案 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"));