向此xml结构添加元素

时间:2012-11-30 10:35:26

标签: c# xml xpath linq-to-xml

<root>
    <element1>innertext</element1>
    <element2>innertext</element2>
    <element3>
        <child1>innertext</child1>
    </element3>
</root>

我有一个如上所示的xml结构。

我想“附加”xml文件(已经创建)以在element3&gt;中添加另一个“子”,以便它看起来像这样:

<root>
    <element1>innertext</element1>
    <element2>innertext</element2>
    <element3>
        <child1>innertext</child1>
        <child2>innertext</child2>
    </element3>
</root>

Linq到xml和/或Xpath会很棒

编辑: 我试过这样做:

XElement doc = XElement.Load(mainDirectory);
XElement newElem = doc.Elements("element3").First();
newElem.Add(new XElement("child2", "child2innertext"));
doc.Add(newElem);
doc.Save(mainDirectory); 

3 个答案:

答案 0 :(得分:3)

XmlDocument xDoc = new XmlDocument();
        xDoc.Load("filename.xml");

        foreach (XmlNode xNode in xDoc.SelectNodes("/root/element3"))
        {
            XmlElement newElement = xDoc.CreateElement("Child2");


            xNode.AppendChild(newElement);
            xNode.InnerText = "myInnerText";
        }

答案 1 :(得分:2)

使用XDocument,您可以实现:

 string xml = "<root><element1>innertext</element1><element2>innertext</element2><element3><child1>innertext</child1></element3></root>";

 var doc = XDocument.Parse(xml); //use XDocument.Load("filepath"); in case if your xml is in a file.

 var el3 = doc.Descendants("element3").FirstOrDefault();

 el3.Add(new XElement("child2", "innertext"));

答案 2 :(得分:1)

请尝试这个LINQPAD示例

void Main()
{
var xml = 
@"<root>
        <element1>innertext</element1>
        <element2>innertext</element2>
        <element3>
            <child1>innertext</child1>
        </element3>
    </root>";

    var doc = XDocument.Parse(xml); 
    doc.Root.Element("element3")
    .Add(new XElement("child2", "innertext"));

    doc.Dump();
}
相关问题