3

なぜこれが機能しないのかわかりません。

既知の形式の XmlNode があります。それは:

<[setting-name]>
    <dictionary>
       <[block-of-xml-to-process]/>
       <[block-of-xml-to-process]/>
       <[block-of-xml-to-process]/>
    </dictionary>
</[setting-name]>

patternという変数にノードへの参照があります。上記の [block-of-xml-to-process] で表されるノードの反復可能なコレクションが必要です。ブロックの名前と構造は、現時点では不明です。[設定名] はわかっています。

これはかなり簡単に思えます。ブロックを指す XPATH 式を 6 つ思いつくことができます。私はもう試した:

XmlNodeList kvpsList = pattern.SelectNodes(String.Format(@"/{0}/dictionary/*", _CollectionName));
XmlNodeList kvpsList = pattern.SelectNodes(String.Format(@"{0}/dictionary/*", _CollectionName));
XmlNodeList kvpsList = pattern.SelectNodes(@"//dictionary/*");
XmlNodeList kvpsList = pattern.SelectNodes(@"//dictionary");

しかし、XPATH の基本的な理解や .SelectNodes の特別なトリックが不足しているようです。

私は何を間違っていますか?

4

6 に答える 6

3

XPath 文字列から「@」を削除しようとしましたか??

XmlNodeList kvpsList = pattern.SelectNodes("//dictionary");

それはうまくいくはずです-私にとっては毎日うまくいきます:-)

マルク

于 2009-03-31T05:27:51.003 に答える
0

同じ問題が発生しました。これは既知の動作のようですが、予期しない動作です。XmlNamespaceManagerを介したデフォルトの名前空間を持つXml-SelectNodesが期待どおりに機能しないを参照してください

たとえば、XmlDocumentのNameTableを使用してXmlNamespaceManagerをインスタンス化し、メインドキュメント要素のNamespaceURIに関連付けられた「a」などの任意の名前の名前空間を追加することで機能するようになりました。私の場合、XmlDocumentのNamespaceURIは空白でしたが、そのDocumentElementのNameSpaceURIには実際には値があったことに注意してください。おそらく、元々名前空間を指定しないと機能しないのはそのためです。

XmlDocument doc = new XmlDocument();
doc.Load( file.FullName );
XmlNode docElement = doc.DocumentElement as XmlNode;
XmlNamespaceManager nsman = new XmlNamespaceManager( doc.NameTable );
nsman.AddNamespace( "a", docElement.NamespaceURI );
docElement.SelectNodes( "a:wavetrack", nsman ); //docElement.SelectNodes("wavetrack") wasn't working
于 2013-01-29T21:21:51.013 に答える
0

変数の用途は何patternですか?
XML全体のDOMへの参照ですか?

これが何をもたらすかを見てください pattern.SelectNodes("//dictionary/").ChildNodes.Count

編集:これは整形式のxmlですか?

于 2009-03-30T21:57:13.630 に答える
0

これを探していたところ、次のように入力するだけで機能することがわかりました。

XmlNodeList kvpsList = pattern.SelectNodes("dictionary");

理由はわかりませんが、kvpsList にはすべての [block-of-xml-to-process]-s が含まれます。=')

于 2012-04-05T20:59:21.300 に答える
0

名前空間が問題を引き起こしている可能性はありますか? また、「pattern.OuterXml」を調べて、正しい要素を見ていることを確認してください。

于 2009-03-30T21:59:34.857 に答える