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

ASP.NET Discussion :

Génération et lecture XML


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Points : 119
    Points
    119
    Par défaut Génération et lecture XML
    Bonjour,
    Je débute avec la gestion des fichiers XML ;
    Une méthode me permet d'en parcourir un (fiche film sur Allociné) pour récupérer les données.
    Voici le bout de code concerné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    protected Video remplirFicheDetaillee (string fichierAAnalyser, string type, string codeMedia) { // type = movie ou tvserie
                XmlDocument doc = new XmlDocument ();
                XmlReader reader = new XmlTextReader (Server.MapPath (ConfigurationManager.AppSettings["CheminFichesDetaillees"].ToString () + "FicheDetaillee_5818.xml"));//fichierAAnalyser));
                XmlNode node = null;
                try {
                    while (reader.Read ()) {
                        if (reader.Name.Equals (type)) {
                            node = doc.ReadNode (reader);
                            XmlNodeList movieDetails = node.ChildNodes;
    ...
    J'obtiens l'exception suivante sur la ligne "while (reader.Read ()) {" :
    "Le caractère '.', valeur hexadécimale 0x00, ne peut pas commencer un nom. Ligne 1, position 40."
    Et voici le fichier que j'essaye de lire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="UTF-8"?>
    <movie code="5818" xmlns="http://www.allocine.net/v6/ns/">
    <movieType code="4002">Long-métrage</movieType>
    <originalTitle>Titanic - 3D</originalTitle>
    <title>
    ...

    Ce fichier ne s'ouvre même pas sur IE, le navigateur me dit :
    La page XML ne peut pas être affichée
    Impossible d'afficher l'entrée XML en utilisant la feuille de style . Corrigez l'erreur, puis cliquez sur le bouton Actualiser ou réessayez ultérieurement.
    --------------------------------------------------------------------------------
    Le passage du codage actuel au codage spécifié n'est pas pris en charge. Erreur de traitement de la ressource file:///D:/Ut...

    <?xml version="1.0" encoding="UTF-8"?><movie code="5818" xmlns="http://www.allocine.net/v6/ns/"><movieType co...
    Pourtant j'ai réussi à contourner le pb en éditant ce fichier, et en remplaçant l'encodage UTF-8 par UTF-16..... Après cela, le fichier est parcouru sans erreur avec ma fonction...

    Pourriez-vous m'expliquer le pb avec ce fichier ?
    Le problème vient-il de lui, ou bien aussi de ma manière de le lire ?

    Merci d'avance.

  2. #2
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Points : 1 108
    Points
    1 108
    Par défaut
    Si ton fichier n'est pas trop gros, tu peux le charger en mémoire avec Load() (dans xmldocument je crois) et ensuite le parcourrir avec du XPath.

    Tu as aussi Linq2Xml qui est un peu plus récent.

    Ce devrait être mieux que de lire ligne à lige ton document.

    Par contre, tu dois veiller à ce que ton doc soit "bien formé" et ne pose pas de problème d'encodage. (en gros qu'il s'ouvre directement avec IE, par exemple). Vu que tu as du bidouiller il doit y avoir un soucis dès le départ.
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Points : 119
    Points
    119
    Par défaut
    Citation Envoyé par kheironn Voir le message
    Par contre, tu dois veiller à ce que ton doc soit "bien formé" et ne pose pas de problème d'encodage. (en gros qu'il s'ouvre directement avec IE, par exemple). Vu que tu as du bidouiller il doit y avoir un soucis dès le départ.
    Merci kheironn,
    Oui j'essayerai XPath ou Linq2XML.
    Par contre, ce qui m'étonne c'est justement ce fichier XML que j'essaye de lire... pourquoi le fait de changer l'encodage le rend lisible ?
    Y a-t-il un moyen de le lire en donnant en paramètre le type d'encodage, qqchose comme ça ?
    C'est Allociné qui fournit ce fichier tel quel, non lisible sur IE ni firefox à cause (apparemment) de l'UTF-8...

    Merci et @ + !

  4. #4
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Salut,

    Le plus simple est d'utiliser leurs web services et de faire un petit proxy pour sérialiser leurs objets. XSD.exe te permet de créer des objets métier à partir de XML. Il faut faire parfois quelques corrections mais ensuite ça roule.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Points : 119
    Points
    119
    Par défaut
    Salut,

    Immobilis, le pb chez eux est qu'ils ne proposent pas de web service...
    Plusieurs recherches sur le web me l'ont confirmé, dont cette page :

    http://wiki.gromez.fr/dev/api/allocine

    Donc je DOIS parcourir leurs fichiers XML pour avancer, or ceux dont je parle sont invalides pour IE et firefox, d'où le bug que je rencontre...

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Points : 119
    Points
    119
    Par défaut
    En attendant de trouver mieux, j'essaye de modifier le fichier XML "mal formé" pour remplacer l'encodage UTF-8 en Unicode ou UTF-16, mais là déjà je bloque car je ne peux pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    XmlDocument doc = new XmlDocument();
    doc.Load (monFichier);
    car ça lève la même exception qu'au début du topic... :
    Le caractère '.', valeur hexadécimale 0x00, ne peut pas commencer un nom. Ligne 1, position 40.
    Que puis-je faire ?
    Merci d'avance pour votre aide.

  7. #7
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Citation Envoyé par TheReturnOfMuton Voir le message
    Immobilis, le pb chez eux est qu'ils ne proposent pas de web service...
    Ce qu'ils proposent c'est un fichier XML pour une requete http. C'est une forme de service web.
    Citation Envoyé par TheReturnOfMuton Voir le message
    On a la même et chez moi ça marche j'obtiens un flux XML à partir de cette URL: http://api.allocine.fr/xml/search?q=thor&partner=1. Ce XML correspond à une liste d'objets métier qu'il te faudra déserialiser.

    Y'a juste la valeur de "partner" qu'il faut changer. Je te laisse chercher.
    "Winter is coming" (ma nouvelle page d'accueil)

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Points : 119
    Points
    119
    Par défaut
    Immobilis,
    L'URL que j'utilise est
    http://api.allocine.fr/xml/movie?code=5818&partner=3
    Et elle me renvoie bien le flux de données. Mais un simple clic sur cette URL montre qu'il y a un pb...

    Sinon, ce que je n'ai pas dit, c'est que je commence par enregistrer ce flux sur le disque dur avec cette 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
            public string retrievePageContentFicheDetaillee (string codeMedia) {
                Uri uri = new Uri (ConfigurationManager.AppSettings["URLFicheDetailleeAllocine"].ToString () + codeMedia.Trim () + "&partner=3&profile=large");
                WebRequest request = WebRequest.Create (uri);
                request.Proxy = new System.Net.WebProxy (ConfigurationManager.AppSettings["Proxy"].ToString (), true);
                request.Proxy.Credentials = CredentialCache.DefaultCredentials;
    
                WebResponse response = request.GetResponse ();
                StreamReader sr = null;
    
                try {
                    sr = new StreamReader (response.GetResponseStream ());
                    string resultatRecherche = sr.ReadLine ();
                    string nomFichierCree = "FicheDetaillee.xml";
    
                    //Crée un nouveau fichier et écrit dedans 
                    File.WriteAllText (Server.MapPath (ConfigurationManager.AppSettings["CheminFichesDetaillees"].ToString () + nomFichierCree), resultatRecherche, System.Text.Encoding.UTF8);
                    return nomFichierCree;
                } catch (Exception ex) {
                    return null;
                } finally {
                    if (sr != null)
                        sr.Close ();
                }
            }
    J'ai essayé plusieurs encodages dans la fonction WriteAllText, mais le fichier est illisible.
    Est-ce que je peux désérialiser directement le flux sans le sauvegarder sur le disque ?

    Merci pour ton aide.

  9. #9
    Expert éminent
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Points : 9 506
    Points
    9 506
    Par défaut
    Citation Envoyé par TheReturnOfMuton Voir le message
    Immobilis,
    L'URL que j'utilise est
    http://api.allocine.fr/xml/movie?code=5818&partner=3
    Et elle me renvoie bien le flux de données. Mais un simple clic sur cette URL montre qu'il y a un pb...
    Aucun soucis de mon côté. Bizarre....
    "Winter is coming" (ma nouvelle page d'accueil)

Discussions similaires

  1. [DOM] problème de génération d'un xml avec dom
    Par WalidNat dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 04/05/2006, 17h12
  2. [XML] Utilisateurs connectés Lecture XML
    Par Polaire76 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 23/01/2006, 12h05
  3. [DOM] Génération dynamique fichier xml
    Par Fabouney dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 03/10/2005, 09h45
  4. [C#] [WinForms] Lecture XML
    Par stailer dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/10/2004, 14h42
  5. [Débutant] Lecture xml SAX
    Par Ekros dans le forum APIs
    Réponses: 6
    Dernier message: 21/06/2004, 15h14

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