古いXmlNode
ベースのコードがあります。しかし、現在のタスクを解決する最も簡単な方法は、XElement
とLINQ-to-XMLを使用することです。唯一の問題は、.NET FrameworkでXmlNode
をXElement
に変換するための直接的または明白な方法がないことです。
まず最初に、XmlNode
インスタンスを受け取り、XElement
インスタンスに変換するメソッドを実装します。
この変換を実装するにはどうすればよいですか?
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