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 :

récupérer un document XML depuis une URL


Sujet :

C#

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Points : 12
    Points
    12
    Par défaut récupérer un document XML depuis une URL
    Bonjour,

    Je veux savoir comment on peut récupérer un document xml depuis une URL??

    Qcq peut m'aider??

    Merci d'avance.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2007
    Messages
    693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 693
    Points : 1 187
    Points
    1 187
    Par défaut
    Bonjour,

    Une recherche dans MSDN et voilà : http://msdn.microsoft.com/en-us/libr...tresponse.aspx

    Tu vas récupérer une réponse qu'importe le contenu. Toi tu sais que c'est de l'xml, donc il faudra l'interpréter comme tel.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WebClient wc = new WebClient();
    string xml = wc.DownloadString(url);

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    Merci bien pour vos réponses et votre aide

    Dans mon appli, je récupère le flux XML depuis la réponse de la requête HTTP.
    Mon problème, c'est dans la partie décodage du flux XML reçu, il contient des balises dont le contenu contient des caractères spéciaux, voici un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <url>http://www1.euro.dell.com/content/default.aspx?c=fr&l=en&s=dhs</url>
    Ces balises causes des erreurs lors de la lecture du flux, j'ai essayé de faire le décodage et le chargement du flux comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string fluxXML = HttpUtility.HtmlDecode(IEModule.EnvoieRequeteHttpPost(url));
     xdoc.LoadXml(fluxXML);
    Mais lorsque j'exécute le programme, il m'indique qu'il y a une erreur de lecture des balises que j'ai décrit ci dessus.

    Pouvez vous m'aider??

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Ben si le XML contient des caractères interdits, ce n'est pas un document XML valide... Ici en l'occurence le caractère "&" devrait être remplacé par "&amp;". Si tu peux, arrange-toi avec ceux qui ont généré ce fichier pour qu'il ne contienne pas de caractères interdits. Sinon il n'y a pas vraiment de solution simple...

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Slt Thomas ,
    Merci bien pr ta réponse

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Bonjour a tous,

    J'ai trouvé la solution à mon prob
    :
    il suffit juste de modifier le caractère & par &amp; à l'aide la fonction Replace de la classe string. Voici ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string fluxXML = HttpUtility.HtmlDecode(IEModule.EnvoieRequeteHttpPost(url)); 
    string fluxResultat = fluxXML.Replace("&", "&amp;");
    xdoc.LoadXml(fluxResultat);
    @+

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Euh... pourquoi tu fais un HTMLDecode ?

    C'est pas du HTML, c'est du XML. Et c'est pour ça que tu te retrouves avec "&" à la place de "&amp;".

    De toutes façons, le remplacement n'est pas une bonne solution : qu'est-ce qui se passe si tu as déjà des trucs genre "&lt;" ou "&amp;" dans le document ? ça va les remplacer par "&amp;lt;" et "&amp;amp;", ce qui va foutre en l'air le contenu du document...

    Fais juste comme ça et ça devrait marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string fluxXML = IEModule.EnvoieRequeteHttpPost(url);
    xdoc.LoadXml(fluxResultat);

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    ah, j'ai oublié de supprimer le décodage HTML dans ma réponse précédente
    je l'ai supprimé dans le code, j'ai testé et ça marche

    Mais, ta remarque est intéressante , je doit opter a une solution plus rigide
    .

    Pour le bout de code que tu m'as proposé, ça ne marche pas, je rencontre le problème du caractère "&"

    t'as d'autres solutions??

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Y a quoi dans ta méthode EnvoieRequeteHttpPost ? Tu ferais pas déjà un HtmlDecode là-dedans ?

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    non, je ne fais pas un décodage au niveau de cette fonction.
    le traitement est le suivant: j'exécute la requête et je fait la lecture de la réponse.

    voici ma fonction:

    Code : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    public static string EnvoieRequeteHttpPost(string URL)
            {
                string  reponse = "";
                StreamReader sr = null;
     
                HttpWebResponse reponseReq = null;
                try
                {
                    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(URL);
                    req.ContentType = "application/x-www-form-urlencoded";
                    req.Method = "POST";
                    reponseReq = (HttpWebResponse)req.GetResponse();
                    if (reponseReq != null)
                    {
                        sr = new System.IO.StreamReader(reponseReq.GetResponseStream());
                        reponse = sr.ReadToEnd().Trim();
                    }
                }
                catch (Exception ex)
                { }
                finally
                {
                    if (reponseReq != null)
                    {
                        reponseReq.Close();
                    }
                    if (sr != null)
                    {
                        sr.Close();
                        sr.Dispose();
                    }
                }
                return reponse;
            }

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Bizarre
    A priori ça veut dire que le XML contient vraiment ces caractères... tu as essayé de le récupérer dans un navigateur pour vérifier ?
    Dans ces conditions je ne vois pas d'autre solution que le remplacement, mais c'est vraiment pas propre, et ça risque de foutre en l'air le contenu. Il y a peut-être moyen de faire un peu mieux avec des expressions régulières, mais c'est pas facile

  13. #13
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    oui, j'ai vérifié le contenu XML récupéré dans la réponse de la requête, et il contient ces caractères (exemple de balises de ce flux: <url>http://www1.euro.dell.com/content/default.aspx?c=fr&l=en&s=dhs</url>)

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

Discussions similaires

  1. Charger un XML depuis une URL
    Par norwy dans le forum XML
    Réponses: 1
    Dernier message: 19/06/2010, 13h45
  2. [JDOM] créer un document JDOM depuis une URL
    Par pssst dans le forum Format d'échange (XML, JSON...)
    Réponses: 12
    Dernier message: 07/01/2009, 11h44
  3. Probleme de lecture d'un flux XML depuis une URL
    Par euyeusu dans le forum ASP
    Réponses: 3
    Dernier message: 10/09/2008, 22h01
  4. Récupérer depuis une url l'image via script
    Par Sayrus dans le forum Langage
    Réponses: 2
    Dernier message: 23/02/2007, 19h54
  5. Recupération de données XML depuis une URL
    Par tonymo dans le forum Format d'échange (XML, JSON...)
    Réponses: 27
    Dernier message: 21/11/2005, 13h48

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