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)
在我看来,最简单的方法是使用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)