Xpath sur un xml associé à un schéma

Signaler
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Messages postés
111
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
27 avril 2010
-
Bonjour,

Je cherche à lire la valeur d'un noeud d'un document XML associé à un schéma. Voici le code que j'ai écris :

            XmlDocument doc = new XmlDocument();
            doc.Load(@"c:\\monDoc.xml");
            XmlNode node = doc.SelectSingleNode(@"/Root/noeud1");
Le problème est que node à toujours la valeur null.
Si j'enlève l'appel à mon
schéma dans la balise Root de mon fichier XML alors node est correctement instancié.
Il semble donc que ça soit le fait que le document XML soit lié à un schéma qui empêche la lecture du chemin xPath.
Y-a t-il quelque chose à préciser en plus
lorsque le fichier XML est lié à un schéma pour éviter ce problème ?


merci d'avance pour votre aide.

Mathmax

6 réponses

Messages postés
5
Date d'inscription
jeudi 23 novembre 2006
Statut
Membre
Dernière intervention
28 décembre 2006

Salut,
Essaye peut être XmlNode node = doc.SelectSingleNode(@"Root/noeud1");
Tu peux aussi tester ton path sous XmlSpy pour verifier que c'est le bon.

Max
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

Mon xPath est bon puisque ça marche quand j'enlève l'appel à mon schéma dans la balise Root de mon fichier XML. C'est réellement le fait que le document XML soit lié à un schéma qui pose problème. Voici comment est fait mon appel vers le schéma :
<dtsOrkosNews xmlns="http://tempuri.org/dtsOrkosNews.xsd">
...
<dtsOrkosNews>
où dtsOrkosNews est le nom de ma balise mère.
il s'agit d'un xml généré par XmlDataDocument synchronisé avec un dataset comme ceci :

            sqlConnection1.Open();
            dtaCategory.Fill(dtsOrkosNews1.CATEGORY);
            dtaInfo.Fill(dtsOrkosNews1.INFO);
            sqlConnection1.Close();
            XmlDataDocument xmlDoc = new XmlDataDocument(dtsOrkosNews1);
            XmlNode node = xmlDoc.SelectSingleNode(@"/dtsOrkosNews/CATEGORY/CAT_DESI_FR");
            XslCompiledTransform xslTran = new XslCompiledTransform();
le schéma xml du dataset est lui consultable ici.
J'espère que ça vous aidera à mieux comprendre mon problème. De mon côté, j'ai cherché partout mais je n'ai toujours rien trouvé...
Mathmax
Messages postés
5
Date d'inscription
jeudi 23 novembre 2006
Statut
Membre
Dernière intervention
28 décembre 2006

tu peux essayer de modifier l'appel :
<

dtsOrkosNews xmlns:ms="Recordset.Save" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="Recordset.Save
http://tempuri.org/dtsOrkosNews.xsd">

Si ça ne marche pas je n'ai plus d'idée ^^
Messages postés
111
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
27 avril 2010

Non ! tu dois lui spécifier ton namespace :

            XmlDocument doc = new XmlDocument();
            doc.Load(@"c:\\monDoc.xml");
            
            XmlNamespaceManager nsmanager = new XmlNamespaceManager(doc.NameTable);
            nsmanager.AddNamespace(String.Empty, "http://tempuri.org/dtsOrkosNews.xsd");

            XmlNode node = doc.SelectSingleNode(@"/Root/noeud1", nsmanager);

Normalement ca devrait marcher.
Aussi quand tu utilise des schéma il est bien de valider ton fichier xml par ton schéma au moment de la lecture. Ca évite des erreurs :)

<hr />
C# quand tu nous tiens !!!
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

merci kuky, mais ça ne marche pas chez moi. Par contre en mettant la propriété NameSpace du dataset à null, le XmlDataDocument généré ne contient plus de namespace par défaut et le problème est résolu.
Sinon quelle méthode utilises-tu pour valider un document xml avec un schéma ? Est-il possible de gérer/récupérer les éventuelle erreurs ?

Mathmax
Messages postés
111
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
27 avril 2010

cherche Xmlvalidatingreader dans les msdn :)

<hr />
C# quand tu nous tiens !!!