特定のシーケンスで必要なすべての要素を選択するために使用する次のコードがあります。スニペットは次のとおりです。Xpathを使用してXSDスキーマ内のノードを選択する
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"を持つすべての要素が選択されます。私が望むのは、特に "シーケンス"タグの直後です。
"xs:sequence"としてPathを設定しようとしましたが、「Namespace ManagerまたはXsltContextが必要です。このクエリにはプレフィックス、変数、またはユーザー定義関数があります。私はすでにそれを設定すると思ったので変だ。
何か助けていただきありがとうございます!ありがとう!あなたがそれ以上の情報を必要とするなら、私はそれを提供してくれるでしょう。
敬具、
EDIT tf.rz
:私は Visual StudioのC#を使用しています2008年 .NET 3.5 SP1
基本的な前提は、私がについて投稿している別の質問に関連していますデータテーブルの列の並べ替え。しかし説明を短くする。私は、xsdスキーマが(適切な順序で)検証する要素の名前が必要なだけであると言う必要があります。私はいくつかのxsdスキーマを持っています。これらのスキーマはすべて同じ "フォーマット"に従っており、非常に静的なファイルです。したがって、私は安全にシーケンスタグを探し、すべての子ノードを取得できることを知っています。マイケルはスキーマを書く方法がたくさんあると述べていますが、私が作業しているスキーマはすべて似ていて静的なので、これを行うことができれば100%時間がかかるでしょう。 =)
ありがとう、理論的には今より多くの意味がありますが、ここでは名前空間を扱うことが大きな問題です。私は他のXML文書で問題なく簡単にノードリストを抽出しました。私はあなたが私がやっていることをやっている理由を理解するのを助けるために私のポストに少しの情報を追加しました。スキーマプロセッサを使用するこのコンセプトは私に興味をそそられています。私はそれについても少し研究します。このプロセスの名前がありますか、それとも単純に「スキーマの内容を取得するためにAPIを使用していますか」ですか?私の謝罪、私はかなりプログラミングに新しいです。 –