如何在C#中删除根元素

时间:2013-07-06 13:52:52

标签: c# xml

我是XML& C#。 我想删除根元素而不删除子元素。 XML文件的结构如下所示。

   <?xml version="1.0" encoding="UTF-8"?>
   <dataroot generated="2013-07-06T20:26:48" xmlns:od="urn:schemas-microsoft-com:officedata">
     <MetaDataSection> 
       <Name>KR04</Name> 
       <XMLCreationDate>02.05.2013 9:52:41 </XMLCreationDate> 
       <Address>AUTOMATIC</Address> 
       <Age>22</Age> 
     </MetaDataSection> 
   </dataroot>

我想根元素“dataroot”,所以它应该如下所示。

    <?xml version="1.0" encoding="UTF-8"?>
     <MetaDataSection> 
       <Name>KR04</Name> 
       <XMLCreationDate>02.05.2013 9:52:41 </XMLCreationDate> 
       <Address>AUTOMATIC</Address> 
       <Age>22</Age> 
     </MetaDataSection> 

删除子元素看起来很简单,但我不知道如何只删除根元素。 下面是我到目前为止尝试过的代码。

        XmlDocument xmlFile = new XmlDocument();
        xmlFile.Load("path to xml");

        XmlNodeList nodes = xmlFile.SelectNodes("//dataroot");

        foreach (XmlElement element in nodes)
        {
            element.RemoveAll();
        }

有没有办法只删除根元素?不删除子元素? 谢谢你的支持。

2 个答案:

答案 0 :(得分:8)

最简单的方法是使用LINQ to XML - 类似这样:

XDocument input = XDocument.Load("input.xml");
XElement firstChild = input.Root.Elements().First();
XDocument output = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
                                 firstChild);
output.Save("output.xml");

或者如果您不需要XML声明:

XDocument input = XDocument.Load("input.xml");
XElement firstChild = input.Root.Elements().First();
firstChild.Save("output.xml");

答案 1 :(得分:-1)

如果你需要用c#编码手段

<强>解决方案

 foreach (XElement item in Element.Descendants("dataroot").ToList())
        {
            item.ReplaceWith(item.Nodes());
        }