插入XML节点和内部节点到现有的XML文档中的C#
问题描述:
目前我有工作作为工作C#程序如下:插入XML节点和内部节点到现有的XML文档中的C#
- 接受值的.xls模板(XLS是由用户手动创建)
- 保存值(匹配字段)到数据库
-
转换和写入的.xls到XML。请参考下面的示例输出:
现在,我想要做的是:
- 读取现有的XML(创建的XML)
- 插入另一组节点和子节点(ReleaseLine和子节点)。它必须接受多个ReleaseLine。
-
用附加节点保存/创建新的xml。请参阅以下的输出:
我现有的C#程序很简单,但XML节点和层次是血腥深。我刚刚使用new XElement
方法创建了C#代码,并为每个节点传递值。然后我简单地使用xmlDocument.Save()
方法来编写xml。
[现有XML方案] [3]
答
我找到了我的问题的答案,这里是链接http://www.xmlplease.com/add-xml-linq 使用XPathSelectElement方法,我能够找到正确的节点并附加了新的XElement块。
答
要添加节点或附加在现有的XML数据我倒是使用LINQ XML内容。
XElement xml = XElement.Load("file.xml");
xml.Add(new XElement("uberNode",
new XElement("childNode", content),
new XElement("anotherChildNode", content)));
xml.Save("file.xml");
Here是一些其他相关的解决方案。
添加到特定节点(例如带):
继exisiting XML数据:
`<Names>
<Name>
<prename>John</prename>
<lastname>Snow</lastname>
</Name>
<Name>
<prename>Harry</prename>
<lastname>Harry</lastname>
</Name>
</Names>`
现在我想第一个 “女士prename” 前添加 “年龄” - 标记 - 标签和“家庭” - 标签后的第一个“姓氏”标签。
XElement xml = XElement.Load("file.xml");
var childrens = xml.DescendantsAndSelf().ToArray();
var first_prename = childrens[2];
var first_lastname = childrens[3];
Console.WriteLine(childrens[0]); //prints out the whole content
first_prename.AddBeforeSelf(new XElement("age", 22));
first_lastname.AddAfterSelf(new XElement("family", new XElement("mother", "paula"), new XElement("father", "paul")));
xml.Save("file.xml");
结果:
`<Names>
<Name>
<age>22</age>
<prename>John</prename>
<lastname>Snow</lastname>
<family>
<mother>paula</mother>
<father>paul</father>
</family>
</Name>
<Name>
<prename>Harry</prename>
<lastname>Harry</lastname>
</Name>
</Names>`
我面临的问题和LINQ给了我实现这一目标的最简单的办法! 也有其他类似的方式,例如here。但我尝试了更多,DescendantsAndSelf()让我更容易通过。
感谢您的快速回复。我尝试了下面的代码来在ReleaseLine节点内插入新的节点集合,但是它被插入到XML的根节点。如何将新节点插入到正确的子节点?这是我的代码。再次感谢你的帮助。
–
我编辑了我的最后一个答案。而且我也要谢谢你,因为我现在必须解决这个问题! - – Stophane
工程就像一个魅力,谢谢Stophano。我使用xml.Descendants()方法,但您提供的解决方案有很多帮助,再次感谢,欢呼! –