Fichier Xml avec un espace de noms

yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 - 23 avril 2007 à 16:02
unowspace Messages postés 6 Date d'inscription samedi 3 septembre 2005 Statut Membre Dernière intervention 4 mai 2007 - 4 mai 2007 à 12:10
Salut à tous

voila j'essaie de parser un fichier xml qui ressemble à ça :

<hr />
 <?xml version= "1.0" encoding="UTF-8" ?>

[file:///D:/TEMP/2007-04-11-20H00-daily-catalogue.xml# - ]<CATALOG xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
xmlns:product= http://xxxhost.net/xml/schemas/catalog/product.xsd
xsi:noNamespaceSchemaLocation =http://xxxhost.net/xml/schemas/catalog.xsd>

[file:///D:/TEMP/2007-04-11-20H00-daily-catalogue.xml# -]    <PRODUCT coverart= " true ">

        <product:ID>PRODUCTVALUE</product:ID><hr />

j'arrive à me placer sur le noeud PRODUCT mais en essayant de récuperer la valeur "PRODUCTVALUE" il me génère une erreur de ce type

"Le gestionnaire d'espaces de noms ou XsltContext est requis. Cette requête a un préfixe, une variable ou une fonction définie par l'utilisateur."

voici mon code

<hr />
XPathNavigator nav = doc.CreateNavigator();

// On ajoute la gestion des espaces de noms

XmlNamespaceManager mgr = new XmlNamespaceManager(nav.NameTable);

mgr.AddNamespace("product", "http://xxxhost.net/xml/schemas/catalog/product.xsd");

// On récupère un XPathNodeIterator sur les "PRODUCT"

XPathNodeIterator iter = nav.Select("CATALOG/PRODUCT",mgr);

// Pour chaque "PRODUCT"

while (iter.MoveNext())

{

   // On récupère l'info "product:ID"

   string firstValue = iter.Current.SelectSingleNode("product:ID").Value;

}

<hr />
quelqu'un aurai-t-il une idée???

7 réponses

yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
24 avril 2007 à 13:24
bonjour
bon j'ai fais une petite modification





<hr />



//string firstValue = iter.Current.SelectSingleNode("product:ID").Value;



string firstValue = iter.Current.SelectSingleNode("//product:ID").Value;



<hr />






en ajoutant "//" j'arrive à obtenir la valeur "PRODUCTVALUE" pour le 1er noeud "PRODUCT"

mais cette valeur reste la méme lorsque je parcours tous les noeuds "PRODUCT"

ya personne pour m'aider?????
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
24 avril 2007 à 17:02
salut,

ne serai-ce pas plutot "./product:ID" ?

ou alors, ne serait-ce pas plus simple d'utiliser MoveToFirstChild de récupérer la valeur dans Value et ensuite de faire un MoveToParent ?

ShareVB
0
unowspace Messages postés 6 Date d'inscription samedi 3 septembre 2005 Statut Membre Dernière intervention 4 mai 2007
3 mai 2007 à 15:38
Bonjour,

je me permet de m'inviter dans ce thread car j'ai un problème un peu similaire.

En effet, je ne dois pas parser mais écrire un fichier xml (en réalité un fichier excel au format xml) et pour cela je doit préfixer certains attributs d'un namespace.

Et... impossible... Enfin c'est possibble, mais je n'y arrive pas ;(

Je fais celà en c#.

Si quelqu'un peut m'aider...

Merci!
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
3 mai 2007 à 20:45
salut,

par exemple :
-> expliqué (ou pas) simplement : http://weblogs.asp.net/sonukapoor/pages/206092.aspx
-> la référence : http://msdn2.microsoft.com/en-us/library/d1a1csew(vs.71).aspx

ShareVB
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
unowspace Messages postés 6 Date d'inscription samedi 3 septembre 2005 Statut Membre Dernière intervention 4 mai 2007
4 mai 2007 à 11:49
Merci pour ta réponse.
Depuis mon post précédent je suis arriver à préfixer mon attribut. Le problème c'est que le namespace (qui est déjà défini dans l'en-tête de mon fichier) est redéfini dans le noeud comme second attribut.

Voilà le noeud qu'il crée :
<Data ss:Type="" xmlns:ss="monNameSpace">Texte 1</Data>

Et moi je voudrais ça:
<Data ss:Type="">Texte 1</Data>

Une idée??
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
4 mai 2007 à 11:58
salut,

j'ai trouvé ca : http://msdn2.microsoft.com/en-au/architecture/wkee9k2s.aspx

sinon donne un bout de code...mais regarde aussi à writestartattribute, writestring, writeendattribute...

ShareVB
0
unowspace Messages postés 6 Date d'inscription samedi 3 septembre 2005 Statut Membre Dernière intervention 4 mai 2007
4 mai 2007 à 12:10
J'ai finalement réussi avec l'aide du NamespaceManager. Je pensais que le fait de loader un fichier XML remplissait automatiquement le NamespaceManager. Et ben non!

Donc si quelqu'un rencontre le même problème, voilà ma solution :

Doc_Xml.Load("Mon_Fichier.xml");
XmlNamespaceManager tot = new XmlNamespaceManager(Doc_Xml.NameTable);
tot.AddNamespace("ss", "urn:schemas-microsoft-com:office:spreadsheet");
Nd_Data = Doc_Xml.CreateElement("Data");
XmlAttribute att = Doc_Xml.CreateAttribute("ss", "Type", "urn:schemas-microsoft-com:office:spreadsheet");
Nd_Data.SetAttributeNode(att);
Nd_Data.SetAttribute("ss:Type", "String");

ShareVB encore merci de t'être pencher sur mon problème.
0
Rejoignez-nous