XPathNavigatorを多用して特定のxmlドキュメントを解析するコードライブラリがあります。xmlドキュメントは相互参照されます。つまり、要素は、解析中にまだ検出されていない別の要素を参照できます。
<ElementA ...>
<DependentElementX id="1234">
</ElementA>
<ElementX id="1234" .../>
ドキュメントは実際にはこのようには見えませんが、ポイントは、1)ドキュメント構造全体を強制するxmlスキーマがあり、2)ドキュメント内の要素がいくつかのIDを使用して相互に参照できること、および3)かなりあることです。ドキュメント内の異なる要素間のそのような相互参照はほとんどありません。
ドキュメントは2つのフェーズで解析されます。最初のパスで、ドキュメントをウォークスルーします
XPathDocument doc = ...;
XPathNavigator nav = doc.CreateNavigator();
nav.MoveToRoot();
nav.MoveToFirstChild()...
また、XPathNavigator.Clone()メソッドを使用して、ドキュメント内の現在の位置(要素)を「ブックマーク」することもあります。これにより、XPathNavigatorの軽量インスタンスが得られ、これをどこかに保存して、後でドキュメント内の特定の場所(要素)に戻るために使用できます。
最初のパスで十分な情報が収集されたら(たとえば、id = '1234'のElementXが実際に存在することを確認しました)、保存されたブックマークに戻って(保存されたXPathNavigatorを使用して)解析を完了します。
さて、今私はSilverlight 3.0でこのライブラリを使用しようとしていますが、恐ろしいことにXPathNavigatorはSystem.Xmlアセンブリにありません。
質問:
1)明らかな何かが欠けていますか(つまり、XPathNavigatorは、ツールキットやフリーウェアライブラリなど、何らかの形や形式で存在します)?
2)コードに変更を加える必要がある場合、最善の方法は何ですか?理想的には、XLinqのようなものを使用できるようにするためだけに、コードの80%を書き直さないように、最小限の変更を加えたいと思います。
再開するには、XPathNavigatorをあきらめなければならない場合に必要なのは、ドキュメント内の場所をブックマークして、それらに戻って、中断したところから繰り返し続けることができるようにする方法だけです。
ヘルプ/アイデアを事前に感謝します。