4

私は問題を非常に明確に説明しようとします。レポートをロードする MicroSoftReportViewer を使用します。しかし、それをロードする前に、何かを変更したいと思います。ここまではすべて問題ありません。xpath を使用したいのですが、XMLDocument を使用して rdlc( xml ) ファイルをロードすると、xpath 式が機能しません。機能する唯一の xpath は、"\" 魔女がルートを取得することです。ファイルをメモ帳で開いたところ、最初の xml ノードがこれらのスキーマを使用していることがわかりました

xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" 
xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"

XMLSchema を追加した XMLReader を使用してファイルを読み込もうとしましたが、それでも xpath は機能しません。xpathが機能するようにファイルをロードする方法を確認するためのコードを取得できることに非常に感謝しています。

よろしく、イオーダン

4

1 に答える 1

5

残念ながら、あなたの XPath ステートメントを確認する必要がありますが、私の推測では名前空間の問題です。

接頭辞が付いていない要素はdefault namespace、上記のドキュメントで
http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinitionに設定されている にあります。

XPath クエリでは、これらの名前空間をクエリに含める必要があります。そのため、selectSingleNode( /elementnameicanseeinnotepad) では何も得られません。

クエリに名前空間を追加するには、XmlNamespaceManagerクラスを使用する必要があります (または、お勧めしない XPath の詳細な構文を使用する必要があります)。

// get an instance  
XmlNamespaceManager xMngr = new XmlNamespaceManager();
// associate the prefix ´def´ with the namespace-uri from the xml document we loaded
xMngr.AddNamespace( `def´, http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition);
// associate the prefix ´rd´ (same as used in document) with the namespace-uri from the xml document we loaded
xMngr.AddNamespace( `rd´, http://schemas.microsoft.com/SQLServer/reporting/reportdesigner);

// use the prefix(s) in the XPath query  
xDoc.DocumentElement.SelectSingleNode(´/def:elementnameiseeinnotepad´, xMngr );

お役に立てれば。

于 2010-02-17T21:12:02.243 に答える