9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

XmlDocumentをXElementに変換する方法

Last updated at Posted at 2024-09-19

記事製作の経緯

あるプロジェクトをやっているときに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
XmlDocument xmlDoc = new XmlDocument(); //XMLの読み込み
xmlDoc.Load(xmlFile);// XMLの読み込み

その後、XmlDocumentをXmlNodeReaderを使いXDocumentへ変換する。

XmlDocument→XDocument
XDocument xDoc = XDocument.Load(new XmlNodeReader(xmlDoc)); //XDocumentへの変換

XDocumentからXElementへの変換

最終的にXDocumentをパースを使ってXElementへ変換する。

XDocument→XElement
XElement xEle = XElement.Parse(xDoc.ToString()); //XElementへの変換

おまけ:XDocumentからXmlDocumentへの変換

一応XDocumentをCreateReaderを使うことでXmlDocumentに変換する方法も書いておく。

XDocument→XmlDocument
xmlDoc.Load(xdoc.CreateReader()); //XDocumentへの変換

おわりに

以上でXmlDocumentからXElementへの変換は出来た。
本当に簡単な方法だが日本語の記事で存在している事が重要だと思うので、
どうか役立てていただけたら幸いだ。

参考

XDocument to XElement
https://stackoverflow.com/questions/13460461/xdocument-to-xelement

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?