6

私は 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();
        }

ルート要素のみを削除する方法はありますか? 子要素を削除せずに?よろしくお願いします。

4

2 に答える 2

11

これを行う最も簡単な方法は、次のような 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");
于 2013-07-06T13:54:58.953 に答える