在xml文件中插入节点

时间:2011-08-28 20:03:43

标签: c# xml

我有一个如下所示的xml文件,我需要在c#中编辑它以插入一个新节点:

<?xml version="1.0" encoding="utf-8"?> 
<Users>
    <User>
    <Name>John Smith</Name>
    <test>
        <Date>23.05.2011</Date>
        <points>33</points>
    </test>
    <test>
        <Date>22.06.2011</Date>
        <points>29</points>
    </test>
    </User>
    <User>
    <Name>David Chris</Name>
    <test>
        <Date>01.02.2009</Date>
        <points>25</points>
    </test>
    <test>
        <Date>14.01.2010</Date>
        <points>231</points>
    </test>
</User>

我需要在用户名为“John Smith”的所有子元素中插入另一个“在此示例中为第三个”元素。 所以xml将成为:

<?xml version="1.0" encoding="utf-8"?> 
<Users>
    <User>
    <Name>John Smith</Name>
    <test>
        <Date>23.05.2011</Date>
        <points>33</points>
    </test>
    <test>
        <Date>22.06.2011</Date>
        <points>29</points>
    </test>
    <test>
        <Date>30.10.2011</Date>
        <points>21</points>
    </test></b>
    </User>
    <User>
    <Name>David Chris</Name>
    <test>
        <Date>01.02.2009</Date>
        <points>25</points>
    </test>
    <test>
        <Date>14.01.2010</Date>
        <points>231</points>
    </test>
</User>

任何帮助都非常感谢.. 非常感谢..

4 个答案:

答案 0 :(得分:2)

class Program
{
    static void Main()
    {
        var doc = XDocument.Load("test.xml");
        var johnSmith = doc
            .Descendants("User")
            .Descendants("Name")
            .Where(x => x.Value == "John Smith")
            .Select(x => x.Parent)
            .First();

        johnSmith.Add(
            new XElement("test",
                new XElement("Date", "30.10.2011"),
                new XElement("points", "21")
            )
        );
        doc.Save("new.xml");
    }
}

答案 1 :(得分:2)

简单(假设您使用的是.NET 3.5或更高版本):

  • 加载文档(例如,使用XDocument.Load
  • 添加相关元素(创建新XElement,找到插入点,调用insertionPoint.Add(newElement)
  • 保存文档(XDocument.Save

LINQ to XML使几乎所有基于XML的任务都比旧API更简单......如果上面的内容不够好,我强烈建议您阅读LINQ to XML教程。

没有简单的方法可以插入新元素而不用完全读取旧文件,操作它然后完全写出来。从理论上讲,可以XmlReaderXmlWriter的流式方式进行操作,但它们几乎总是比它们的价值更麻烦。

答案 2 :(得分:0)

  1. 对于.NET Framework 3.5及更高版本:XDocument
  2. 对于.NET Framework 1.1及更高版本:XmlDocument

答案 3 :(得分:0)

你走了:

class Program
{
    static void Main(string[] args)
    {
        XElement main = XElement.Load(@"users.xml");

        // write new data to new file
        string newDate = "01.01.2012";
        string newPoints = "42";
        main.Descendants("User")
            .Descendants("Name")
            .Where(e => e.Value == "John Smith")
            .Select(e => e.Parent)
            .First()
            .Add(new XElement("test",
                new XElement("date", newDate),
                new XElement("points", newPoints)
                )
            );

        main.Save("users2.xml");
    }
}