2010-01-20 5 views
4

Je vais essayer d'expliquer le problème très clairement. J'utilise MicroSoftReportViewer où je charge mon rapport. Mais avant de le charger je veux changer quelque chose. Jusqu'à ici tout va bien. Je veux utiliser xpath mais quand je charge le fichier rdlc (xml) en utilisant XMLDocument, l'expression xpath ne fonctionne pas. Le seul xpath qui fonctionne est "\" sorcière obtient la racine. J'ai ouvert le fichier avec le bloc-notes et vu que le premier noeud XML utilise ces schémasUtilisation du rapport xpath et rdlc

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

j'ai essayé de lire le fichier en utilisant XMLReader avec XMLSchema ajouté, mais encore XPath ne fonctionne pas. S'il vous plaît je serai très reconnaissant d'obtenir la paix du code pour voir comment charger le fichier afin que xpath fonctionne.

Cordialement, Iordan

Répondre

5

je suis NECESSITE peur de de voir votre Nous pouvons également nous déclaration XPath pour être sûr, mais je pense un problème avec les espaces de noms.

Les éléments qui ne sont pas préfixés sont dans le default namespace qui, pour le document ci-dessus, il met à
http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition.

Vos requêtes XPath doivent maintenant inclure ces espaces de noms dans les requêtes. Ainsi, un selectSingleNode (/elementnameicanseeinnotepad) ne vous donnera rien.

Pour ajouter les espaces de noms dans la requête, vous devrez utiliser la classe XmlNamespaceManager (ou utiliser la syntaxe verbeuse de XPath que je ne recommande pas).

// 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); 

Espérons que cela aide.

+0

Salut, merci beaucoup pour la réponse est juste ce dont j'avais besoin.Il fonctionne bien. – IordanTanev

Questions connexes