IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Parsing XML et namespace : pourquoi ça marche pas ? [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut Parsing XML et namespace : pourquoi ça marche pas ?
    Bonjour,

    Je tente de faire un client CalDAV.

    Pour se faire, je me connecte au serveur (Zimbra en l'occurence) et je lui demande de m'envoyer la liste des URL des différents objets disponibles, afin de récupérer l'adresse du calendrier (Calendar).

    Je reçois le flux XML suivant (les [...] sont là pour éviter de vous poster le fichier en entier, le flux XML est valide.

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?xml version=\"1.0\" encoding=\"UTF-8\"?>
    <D:multistatus xmlns:D=\"DAV:\">
      <D:response>
    	<D:href>/dav/xxx.yyy@zzz.eu/</D:href>
    	<D:propstat>
    		<D:status>HTTP/1.1 200 OK</D:status>
    		<D:prop>
    			<D:displayname>USER_ROOT</D:displayname>
    		</D:prop>
        </D:propstat>
      </D:response>
    [...]
      <D:response>
        <D:href>/dav/xxx.yyy@zzz.eu/Calendar/</D:href>
        <D:propstat>
          <D:status>HTTP/1.1 200 OK</D:status>
          <D:prop>
            <D:displayname>Calendar</D:displayname>
          </D:prop>
        </D:propstat>
      </D:response>
    [...]
    </D:multistatus>

    Et voici mon code :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                string response = SendQuery("PROPFIND", "<?xml version=\"1.0\"?><D:propfind xmlns:D=\"DAV:\"><D:prop><D:displayname/></D:prop></D:propfind>", RootAddress);
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(response);
                XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
                nsmgr.AddNamespace("D", "DAV:");
                return new Uri(string.Concat(BaseAddress.OriginalString, doc.SelectSingleNode(string.Format("/D:multistatus/D:response[D:propstat/D:prop/D:displayname = '{0}']/D:href", name), nsmgr).InnerText));

    Le "SelectSingleNode" plante, avec un XPathException.

    Qu'est-ce qui ne va pas ?

    Voici la chaîne telle qu'elle est passée (string.Format décodé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /D:multistatus/D:response[D:propstat/D:prop/D:displayname = 'Calendar']/D:href
    J'ai essayé, pous debug :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    doc.SelectSingleNode("/", nsmgr);
    Ça marche (retourne le document entier).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    doc.SelectSingleNode("/D:multistatus", nsmgr);
    Ça plante. Même erreur.
    J'en déduit que c'est donc le namespace "D:" qui fout le boxon. Pourtant, je pense l'avoir correctement déclaré non ?
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
                nsmgr.AddNamespace("D", "DAV:");

  2. #2
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Bon, je pige rien (comme d'habitude).

    J'ai rien changé, relancé le programme, et maintenant ça marche...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] 2 boucles sur une requête, pourquoi ça marche pas?
    Par MisterMacPhisto dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/04/2007, 12h32
  2. Pourquoi ca marche pas :-(
    Par Flushovsky dans le forum Langage
    Réponses: 3
    Dernier message: 20/12/2005, 17h55
  3. Comprends pas pourquoi ca marche pas
    Par cellimo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/11/2005, 22h10
  4. [OLE DB] pourquoi ca marche pas ??
    Par aurel89 dans le forum MFC
    Réponses: 3
    Dernier message: 09/09/2005, 17h23
  5. Accept : pourquoi ça marche pas ?
    Par doudblast dans le forum Linux
    Réponses: 16
    Dernier message: 08/03/2005, 11h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo