-1

XMLを再帰的に調査するための推奨される方法は何ですか?
XMLReader// XMLDocument/XMLTextReaderその他のオプション?

XMLを読み取る方法がたくさんあるのはなぜか少し混乱しています。

重要な注意:Stream Xml読み取りオブジェクトが特定の参照オブジェクトからそれ自体を作成できるはずであるという制約があります。

4

2 に答える 2

3

と の両方がドキュメントのランダム アクセスXDocumentXmlDocumentサポートするため、ノード階層の双方向トラバースがサポートされます。したがって、これらのいずれかが再帰的な方法として適しています。

XDocumentXmlDocumentXPath を使用してドキュメントをクエリする場合はより便利ですが、LINQ を使用するように設計されています。それは本当に好みの問題であり、その時に必要なものです。どちらも同じように有効なオプションであり、非常によく似た機能を提供します。

XMLTextReaderドキュメント グラフ全体を検証せずに、ストリームから一度に 1 つのノードを読み取るだけなので、より効率的です。ただし、これは順方向専用であるため、ノード ツリーを遡って親ノードに戻ることはできません。したがって、実行している内容には適していない可能性があります。

XMLReaderXMLTextReader(とりわけ) の抽象基本クラスであるため、直接使用することはできません。

アップデート

上記のコメントで、実際にやろうとしているのはすべてのリーフ要素を見つけることだと述べたので、再帰を使用する必要はまったくありません。LINQ または XPath を利用して、すべての作業を行うことができます。LINQ を使用したくないと言ったので、XPath を使用してそれを行う方法は次のXmlDocumentとおりです。

XmlNodeList leafElements = doc.SelectNodes("//*[not(node())]");

またはXDocument

IEnumerable<XElement> leafElements = doc.XPathSelectNodes("//*[not(node())]");
于 2012-12-22T13:17:39.853 に答える
1

私自身、常にXDocumentに傾倒してきました。XDocument.Load(Stream) (またはそのオーバーロードの 1 つ)を使用して、ストリームからデータを読み込むことができます。

于 2012-12-22T13:13:33.377 に答える