記事製作の経緯
あるプロジェクトをやっているときにXMLをXmlDocumentで取り込む関数をXElementで読み込む箇所にも使いたいという話になった。
なんでそんな事をしなければならないのかと思われるかもしれないが、XmlDocumentを読み込む関数で結構長めの読み込みが失敗したときの処理があったためだ。
オーダーとしては出来ればこの長い処理を一か所しか使わないXElementのためにまた作り直したくないとの事だったので、調べることになった。
結論から言うと見つかりはしたが日本語の記事が見つからず、そこそこ探すのに時間がかかってしまった。よって後続のためにこの方法を日本語で書こうと思う。
方法
XmlDocumentからXElementに変換は難しいので、この記事では間にXDocumentを挟む。
つまりXmlDocument→XDocument→XElementとなるわけだ。
バージョン
Windows 10 Pro 22H2 OSビルド 19045.4894
Microsoft Visual Studio Express 2015 (64 ビット) - Current Version 14.0.23107.0
Microsoft .NET Framework Version 4.8.09037
XmlDocumentからXDocumentへの変換
まずはXMLをXmlDocumentで読み込む。
XmlDocument xmlDoc = new XmlDocument(); //XMLの読み込み
xmlDoc.Load(xmlFile);// XMLの読み込み
その後、XmlDocumentをXmlNodeReaderを使いXDocumentへ変換する。
XDocument xDoc = XDocument.Load(new XmlNodeReader(xmlDoc)); //XDocumentへの変換
XDocumentからXElementへの変換
最終的にXDocumentをパースを使ってXElementへ変換する。
XElement xEle = XElement.Parse(xDoc.ToString()); //XElementへの変換
おまけ:XDocumentからXmlDocumentへの変換
一応XDocumentをCreateReaderを使うことでXmlDocumentに変換する方法も書いておく。
xmlDoc.Load(xdoc.CreateReader()); //XDocumentへの変換
おわりに
以上でXmlDocumentからXElementへの変換は出来た。
本当に簡単な方法だが日本語の記事で存在している事が重要だと思うので、
どうか役立てていただけたら幸いだ。
参考
XDocument to XElement
https://stackoverflow.com/questions/13460461/xdocument-to-xelement