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 :

XML Parser soucis :(


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 32
    Points
    32
    Par défaut XML Parser soucis :(
    Slt,
    Je souhaite récupérer des données venant du fichier xml.
    http://datafeed.edmonton.ca/v1/coe/Neighbourhoods/?$filter=id eq 308

    J'ai commencé à faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var feedXML = XDocument.Parse(e.Result);
    Mais je n'arrive pas à connaitre mon descendant. Je souhaite receuillir
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <d:name>ABBOTTSFIELD</d:name>
            <d:descname>Abbottsfield</d:descname>
            <d:nbhdnum m:type="Edm.Double">2010</d:nbhdnum>
            <d:desc>Abbottsfield was once owned by E.F. Carey, one of Edmonton's most 
    prominent 19th century
    citizens. Located in the City's northeast and annexed City in 1961, 
    actual development began
    nearly a decade later when a landfill on the site was transformed</d:desc>
    les éléments suivants.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var feeds = from feed in feedXML.Descendants("....")
                            select new
                            {
                                Title = feed.Element("d:descname"),
                            };
    ??
    Merci d'avance.

  2. #2
    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 : 43
    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
    tu donnes pas assez d'éléments pour qu'on puisse te répondre... poste plutôt un fichier complet (c'est à dire avec la structure complète, pas avec toutes les données...)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    ok.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     var wc = new System.Net.WebClient();
                var queryUrl = "http://datafeed.edmonton.ca/v1/coe/Neighbourhoods/?$filter=id eq " + idGraph;
                wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
                wc.DownloadStringAsync(new Uri(queryUrl));
     
            }
     
            void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
            { var feedXML = XDocument.Parse(e.Result);
     
                var feeds = from feed in feedXML.Descendants("... d:name ?? ")
    Comment interroger le xml pour récupérer les données suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <d:name>
    <d:descname>
    <d:nbhdnum m:type="Edm.Double">
    <d:desc>>
    Merci

  4. #4
    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 : 43
    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
    En fait c'est pas ça que je te demandais, je voulais voir le fichier XML complet... mais j'avais pas vu qu'il y avait un lien

    Déjà, évite d'utiliser Descendants, parce que ça ne permet pas d'indiquer où est exactement l'élément recherché dans la structure ; utilise plutôt Elements.

    Ensuite, il y a les namespaces qui ne facilitent pas les choses, vu qu'il faut les spécifier explicitement.

    Le code suivant fonctionne bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        var atom = XNamespace.Get("http://www.w3.org/2005/Atom");
        var m = XNamespace.Get("http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");
        var d = XNamespace.Get("http://schemas.microsoft.com/ado/2007/08/dataservices");
        var feeds =
            from entry in feedsXML.Root.Elements(atom + "entry")
            let properties = entry.Element(atom + "content").Element(m + "properties")
            select new
            {
                Name = properties.Element(d + "name").Value,
                DescName = properties.Element(d + "descname").Value,
                Nbhdnum = properties.Element(d + "nbhdnum").Value,
                Desc = properties.Element(d + "desc").Value
            };
    Au fait, apparemment le flux que tu cherches à lire utilise le protocole OData, il y a des outils pour ça dans le framework. Perso je ne les ai jamais utilisés, mais il y a un tuto sur le sujet ici :

    http://badger.developpez.com/tutorie...data-services/

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Merci pour ton aide mais ton code ne marche pas avec moi

    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
                var atom = XNamespace.Get("http://www.w3.org/2005/Atom");
                var m = XNamespace.Get("http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");
                var d = XNamespace.Get("http://schemas.microsoft.com/ado/2007/08/dataservices");
                var feeds =
                    from entry in feedsXML.Root.Elements(atom + "entry")
                    let properties = entry.Element(atom + "content").Element(m + "properties")
                    select new  
                    {
                        Name = properties.Element(d + "name").Value,
                        DescName = properties.Element(d + "descname").Value,
                        Nbhdnum = properties.Element(d + "nbhdnum").Value,
                        Desc = properties.Element(d + "desc").Value
                    };
     
                child.BanksDataGrid.ItemsSource = feeds;
    Le but est de venir alimenté une dataGrid.
    Message d'erreur :
    Object reference not set to an instance of an object. en pointant sur le select new

  6. #6
    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 : 43
    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... voilà le code EXACT que j'ai utilisé pour tester (avec LINQPad) et qui fonctionne :

    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
     
    void Main()
    {
        string uri = "http://datafeed.edmonton.ca/v1/coe/Neighbourhoods/?$filter=id eq 308";
        var feedsXML = XDocument.Load(uri);
        var atom = XNamespace.Get("http://www.w3.org/2005/Atom");
        var m = XNamespace.Get("http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");
        var d = XNamespace.Get("http://schemas.microsoft.com/ado/2007/08/dataservices");
        var feeds =
            from entry in feedsXML.Root.Elements(atom + "entry")
            let properties = entry.Element(atom + "content").Element(m + "properties")
            select new  
            {
                Name = properties.Element(d + "name").Value,
                DescName = properties.Element(d + "descname").Value,
                Nbhdnum = properties.Element(d + "nbhdnum").Value,
                Desc = properties.Element(d + "desc").Value
            };
        feeds.Dump();
    }
    Après, peut-être que dans certains cas il manque certains éléments, tu peux vérifier comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            ...
            let nameElement = properties.Element(d + "name")
            let descNameElement = properties.Element(d + "descname")
            let nbhdnumElement = properties.Element(d + "nbhdnum")
            let descElement = properties.Element(d + "desc")
            select new  
            {
                Name = nameElement != null ? nameElement.Value : null,
                DescName = descNameElement != null ? descNameElement.Value : null,
                Nbhdnum = nbhdnumElement != null ? nbhdnumElement.Value : null,
                Desc = descElement != null ? descElement.Value : null
            };

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Thanks you ca marche parfaitement Merci
    Tu me sauves

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

Discussions similaires

  1. [JAXP] com.sun.xml.parser.ValidatingParser
    Par yolepro dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 05/11/2008, 15h36
  2. [XML] Parser une DTD?
    Par La Truffe dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 03/04/2007, 11h28
  3. [XML::PARSER] Problème d'encodage
    Par frangin2003 dans le forum Modules
    Réponses: 13
    Dernier message: 05/09/2005, 14h59
  4. [XML] Parser XML
    Par RobinJulie dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/02/2005, 08h48
  5. [XML] Parser selon des noeuds enfants
    Par GLDavid dans le forum Modules
    Réponses: 5
    Dernier message: 20/08/2004, 20h42

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