投稿者 魔界の仮面弁士  (社会人) 投稿日時 2018/9/3 00:35:24
> 解説通りの結果となる事を確認しました。

後半の解説が一部間違っていて申し訳ありません。
いずれにせよ、互いの意図は伝わったようで何よりです。(^^;


VB2010 ではなく、最近の環境であれば、
 Dim value1 As String = xmlDoc.SelectSingleNode("/Root/ID/text()")?.Value
 Dim value2 As String = xmlDoc.SelectSingleNode("/Root/ID/Name/text()")?.Value
という手も使えたかも知れません…。



> Textノードが列挙されて意味不明でしたが
> これで納得しました。
場合によっては CDATA セクション、コメント、処理命令などの
扱いも考える必要がありますが、今のところは大丈夫そうですね。


> 自分はほとんどLINQ式を使いますが、DOM式にしかできない事、又DOM式がLINQ式
> に比べて優位な部分があるのでしょうか?

XmlDocument は、CLR1 環境でも動作する、という程度の優位点ぐらいしか
思い当たらないですね。
こちらは W3C DOM Level 1 Core および Level 2 Core に準拠した
標準的な API で、古いバージョンの .NET Framework でも動作します。

一方、XDocument は、XLinq すなわち LINQ to XML のために
再設計されたもので、後発だけに使いやすくなっています。
IXmlLineInfo を通じて行番号と行位置を得ることもできますし、
XML 名前空間の扱いについても、こちらの方が扱いやすいかと。

https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/concepts/linq/linq-to-xml-vs-dom
https://blogs.msdn.microsoft.com/codejunkie/2008/10/08/xmldocument-vs-xelement-performance/


ただし、XPath を使う場合においては、私は DOM 版の実装である
SelectSingleNode / SelectNodes の方が好みです。

XLinq 版も、System.Xml.XPath 名前空間に、
XPathSelectElement(s) / XPathEvaluate の拡張メソッドが
用意されていますが、こちらは若干使いにくく感じています。


というのも、DOM 版の XPath は XmlNode を返すので
"/Root/ID/@id" や "/Root/ID/text()" を指定できるのですが、
XLinq 版の方は XNode ではなく XElement なので、
エラーになってしまうから…。
かといって XPathEvaluate だとレイトバインドになってしまうし。