none
Lire un fichier XML RRS feed

  • Question

  • Bonsoir,

    Je débute en programmation C# et surtout Windows Phone 7.

    Pour réaliser ma première application, je souhaite charger des données d'un fichier XML pour les faire apparaître sur une ListBox. Je voulais le faire par déserialisation (StreamReader sur le fichier d'entrée, puis stoker les données dans une collection de ma classe à l'aide d'un XmlSerializer) mais je crois comprendre que les accès aux fichiers sont restreints (pour ne pas dire quasi interdits :)

    Les seules infos que je trouve concernent l'IsolatedStorage pour créer puis lire des fichiers "à la volée", mais mon souhait est de charger un fichier XML qui serait livré dans le package de l'application.

    SVP, comment faire ?

    Merci d'avance,

    waici

    mardi 21 décembre 2010 21:39

Réponses

  • Bon après 3 longues soirées de tentatives et surtout de recherches sur le net, j'ai trouvé tout seul !

    Le seul moyen que j'ai trouvé de lire un fichier XML "incorporé" dans l'application est d'utiliser un XMLReader qui peut avoir en paramètre une URI (en fait j'étais sur la bonne voie :)

    Voici le code utilisé :

    string path = "/MyApp;component/files/data/"+Lang+"/file.xml";
    XMLReader xr = XMLReader.Create(path);
    XMLSerializer xs = new XMLSerializer(MyGenericList.GetType());
    MyGenericList = xs.Deserialize(xr) as List<MyClass>;
    
    

    path représente l'URI de mon fichier XML (placé dans une arbo créée dans le projet), xr est le XMLReader qui va lire le fichier, et xs le Serializer qui va charger mes données dans ma liste générique.

    A NOTER : j'avais au départ une erreur de format XML lorsque je tentais de déserialiser le fichier. Je me suis donc dit : je vais sérialiser ma collection et je vois à quoi ressemble le fichier. Que nenni : le fichier n'était toujours pas bon... en fait je m'en suis sorti en effaçant des infos écrites par le serializer (si, si)

    Le "format" du fichier sérialisé : <?xml ...?><ArrayOfMyClass xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3c.org/2001/XMLSchema"><données...></ArrayOfMyClass>

    J'ai dû effacé les "xmlns" pour faire fonctionner la déserialisation : <?xml ...?><ArrayOfMyClass><données...></ArrayOfMyClass>

    Heureusement, je n'ai besoin que de lire des fichiers XML et les stocker dans des objets... par contre si quelqu'un a besoin de serialiser et déserialiser, il risque d'avoir des problèmes...

    A moins que ce ne soit lié au fait que je deserialise mon fichier dans une liste générique (List<classe>) car sur MSDN il est précisé qu'il est impossible de sérialiser une ArrayList ou une List<> (pourtant je l'ai fait) ou de les deserialiser (ça aussi je l'ai fait :).

    Voilà j'espère que Goog... euh... Bing je voulais dire ! va retrouver ce thread lorsqu'on recherche "C# Windows Phone 7 lire fichier XML" car pour moi il n'a pas trouvé grand chose...

    En tout cas merci à ceux qui ont peut-être cherché une solution, et sûrement à bientôt car j'en suis seulement au début de mon développement !

    waici

    • Marqué comme réponse waici mercredi 22 décembre 2010 23:52
    mercredi 22 décembre 2010 23:51

Toutes les réponses

  • Je ne peux pas tester avant ce soir, mais ma piste est la suivante :

    - Inclure le fichier dans le projet (c'était déjà fait)

    - ouvrir le fichier avec un XDocument via le path suivant : "/appname;component/<chemin_du _fichier>"

    Suis-je sur la bonne voie ? (je complète ce soir dès que j'ai testé)

     

    Merci

    waici

     

    EDIT:

    je complète : ça ne marche pas...

    je ne sais plus quoi essayer... je ne suis pas sorti de l'auberge : mon but est de lire ce fichier XML pour afficher une liste de ce qu'il contient, puis lors de la sélection d'un élément dans la liste, afficher une image correspondante (rien de bien compliqué... enfin d'habitude)

    pour les images, même problème : comment faire pour les charger par la suite ?

    mercredi 22 décembre 2010 13:58
  • Bon après 3 longues soirées de tentatives et surtout de recherches sur le net, j'ai trouvé tout seul !

    Le seul moyen que j'ai trouvé de lire un fichier XML "incorporé" dans l'application est d'utiliser un XMLReader qui peut avoir en paramètre une URI (en fait j'étais sur la bonne voie :)

    Voici le code utilisé :

    string path = "/MyApp;component/files/data/"+Lang+"/file.xml";
    XMLReader xr = XMLReader.Create(path);
    XMLSerializer xs = new XMLSerializer(MyGenericList.GetType());
    MyGenericList = xs.Deserialize(xr) as List<MyClass>;
    
    

    path représente l'URI de mon fichier XML (placé dans une arbo créée dans le projet), xr est le XMLReader qui va lire le fichier, et xs le Serializer qui va charger mes données dans ma liste générique.

    A NOTER : j'avais au départ une erreur de format XML lorsque je tentais de déserialiser le fichier. Je me suis donc dit : je vais sérialiser ma collection et je vois à quoi ressemble le fichier. Que nenni : le fichier n'était toujours pas bon... en fait je m'en suis sorti en effaçant des infos écrites par le serializer (si, si)

    Le "format" du fichier sérialisé : <?xml ...?><ArrayOfMyClass xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3c.org/2001/XMLSchema"><données...></ArrayOfMyClass>

    J'ai dû effacé les "xmlns" pour faire fonctionner la déserialisation : <?xml ...?><ArrayOfMyClass><données...></ArrayOfMyClass>

    Heureusement, je n'ai besoin que de lire des fichiers XML et les stocker dans des objets... par contre si quelqu'un a besoin de serialiser et déserialiser, il risque d'avoir des problèmes...

    A moins que ce ne soit lié au fait que je deserialise mon fichier dans une liste générique (List<classe>) car sur MSDN il est précisé qu'il est impossible de sérialiser une ArrayList ou une List<> (pourtant je l'ai fait) ou de les deserialiser (ça aussi je l'ai fait :).

    Voilà j'espère que Goog... euh... Bing je voulais dire ! va retrouver ce thread lorsqu'on recherche "C# Windows Phone 7 lire fichier XML" car pour moi il n'a pas trouvé grand chose...

    En tout cas merci à ceux qui ont peut-être cherché une solution, et sûrement à bientôt car j'en suis seulement au début de mon développement !

    waici

    • Marqué comme réponse waici mercredi 22 décembre 2010 23:52
    mercredi 22 décembre 2010 23:51