1

特定の順序で必要なすべての要素を選択するために使用したい次のコードがあります。スニペットは次のとおりです。

            XmlDocument schema = new XmlDocument();
            schema.Load(SchemaFileName);
            XmlNamespaceManager xnm = new XmlNamespaceManager(schema.NameTable);
            xnm.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema");
            XmlNodeList list = schema.SelectNodes(Path);

ただ、パスは何を書けばいいのかわかりません。理想的には、「sequence」タグのすべての子ノードを選択したいのですが、Path を「sequence」に設定すると、実行しても何も表示されません。ノードリストは空白です。私がやろうとしているのは、xml ファイルの検証に (順番に) 必要な要素の名前を取得することです。

さらに、パスを「//@name」に設定すると、「name」を属性として持つすべての要素を選択する何かが得られます。私が欲しいものは、「sequence」タグの直後です。

また、パスを「xs:sequence」に設定しようとしましたが、「名前空間マネージャーまたは XsltContext が必要です。このクエリにはプレフィックス、変数、またはユーザー定義関数があります。」というエラーが表示されます。私はすでにそれを設定したと思っていたので、これは奇妙です..

どんな助けでも大歓迎です!ありがとう!さらに情報が必要な場合は、喜んで提供いたします。

心から、

tf.rz

編集: Visual Studio C# 2008 を使用しています。.NET 3.5 SP1

基本的な前提は、データテーブル列の並べ替えに関して投稿した別の質問に関連しています。しかし、説明を短くします。xsd スキーマが (適切な順序で) 検証する要素の名前が必要なだけです。私はいくつかの xsd スキーマを持っていますが、それらはすべて同じ「フォーマット」に従っており、非常に静的なファイルです。したがって、sequence タグを安全に探して、そのすべての子ノードを取得できることがわかりました。Michael は、スキーマを記述する方法はたくさんあると述べましたが、私が扱っているスキーマはすべて類似しており、それらの点で静的であるため、これができれば 100% うまくいくでしょう。=)

4

1 に答える 1

2

基本的な問題は、XPath を使用して、名前空間を使用するソース ドキュメントにアクセスする方法を理解する必要があることです。これはかなり初歩的なことであり、このフォーラムにはそれを説明する何千もの回答があります。接頭辞付きの名前 - xs:sequence - が必要であり、"xs" 接頭辞が URI "http://www.w3.org/2001/XMLSchema" を表すことを XPath エンジンに伝える必要があります - これに対する呪文は、人によって異なります。 XPath エンジンを別のエンジンに変換しましたが、コード内のクラス名を認識できないため、どのクラスかわかりません。

しかし、もっと深い問題があると思います。XPath 式を使用してソース XSD ドキュメントから情報を抽出することは、正規表現を使用して Java プログラムから情報を抽出しようとすることに少し似ています。しばらくは機能します。頭が良ければ、かなり頻繁に機能させることができます。しかし、スキーマを記述する方法が多すぎるため、常に機能するわけではありません。はるかに優れたアイデアは、実際のスキーマ プロセッサを使用してスキーマを処理し、その API を使用してスキーマの内容について質問することです。

于 2011-06-30T09:12:10.653 に答える