我想在我的XML中添加一个三级盛大子节。
在:
<level1>
<level2>
<coolstuff name="name"/>
</level2>
</level1>
后:
<level1>
<level2>
<stupidtags>
<stupidtag name ="stupidname"/>
<stupidtags>
<coolstuff name="coolname"/>
</level2>
</level1>
如何将stupidtags
添加到C#中的level2
标记中?
我实现了一点,我应该如何通过两个级别让newNode追加它,它应该在coolstuff标签之上?
XDocument doc = XDocument.Load(fileOfReportInXML);
XElement newNode= new XElement("stupidtags");
答案 0 :(得分:1)
以下示例代码应演示如何将节点添加到给定位置的现有XML
var xml = new XmlDocument();
xml.Load("file.xml"); // fetch the existing XML
// create the grand child node to be inserted
var node = xml.CreateElement("level3");
node.SetAttribute("attrname", "attrvalue");
var level2Node = xml.SelectSingleNode("level1/level2"); // Use XPath to find the location of insertion
level2Node.PrependChild(node); // Insert the Node in the grand child position
xml.Save("out.xml"); // store the new xml in a new file for demo
以下是file.xml
和out.xml
D:\tmp>type file.xml
<level1>
<level2>
<coolstuff name="name"/>
</level2>
</level1>
D:\tmp>type out.xml
<level1>
<level2>
<level3 attrname="attrvalue" />
<coolstuff name="name" />
</level2>
</level1>
正如您所注意到的,XPath
表达式标识了插入的位置。 XPath是一种丰富的语言,因此您可以根据需要对其进行进一步微调。
答案 1 :(得分:0)
使用xml linq(XDocument)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string xml =
"<level1>" +
"<level2>" +
"<coolstuff name=\"name\"/>" +
"</level2>" +
"</level1>";
XDocument doc = XDocument.Parse(xml);
XElement level2 = doc.Descendants("level2").FirstOrDefault();
level2.Add(new XElement("stupidtags", new object[] {
new XElement("stupidtag", new object[] {
new XAttribute("name", "stupidname")
})
}));
}
}
}