web-dev-qa-db-ja.com

XmlNodeをXElementに変換する方法は?

古いXmlNodeベースのコードがあります。しかし、現在のタスクを解決する最も簡単な方法は、XElementとLINQ-to-XMLを使用することです。唯一の問題は、.NET FrameworkでXmlNodeXElementに変換するための直接的または明白な方法がないことです。

まず最初に、XmlNodeインスタンスを受け取り、XElementインスタンスに変換するメソッドを実装します。

この変換を実装するにはどうすればよいですか?

24
var xElem = XElement.Load( xmlElement.CreateNavigator().ReadSubtree() );

他の回答で使用されているxmlElement.InnerXmlには2つの問題があります。

1-​​=root要素を失います(もちろん、簡単に処理できます)

XmlDocument doc = new XmlDocument();
doc.LoadXml("<root> <sub>aaa</sub> </root>");
var xElem1 = XElement.Load(doc.DocumentElement.CreateNavigator().ReadSubtree());
var xElem2 = XElement.Parse(doc.DocumentElement.InnerXml);

xElem2<sub>aaa</sub>、なし(root

2- xmlにテキストノードが含まれている場合は例外が発生します

XmlDocument doc = new XmlDocument();
doc.LoadXml("<root> text <sub>aaa</sub> </root>");
var xElem1 = XElement.Load(doc.DocumentElement.CreateNavigator().ReadSubtree());
var xElem2 = XElement.Parse(doc.DocumentElement.InnerXml); //<-- XmlException
18
EZI