none
[REGLE] XmlDocument.LoadXml : en local, serveur distant non disponible RRS feed

  • Question

  • Bonjour tout le monde,

    Je viens de lire vers la variable strContenu un contenu xml dans un fichier texte sur mon disque local, fichier que j'ai refermé.

    Lorsque j'exécute ceci

        XmlDocument xmdoc = new XmlDocument();
        xmdoc.LoadXml(strContenu);

    m'est objecté que le serveur distant n'est pas disponible, erreur 503.

    Comment m'y prends-je pour savoir quel est le serveur distant, si c'est mon objet XmlDocument ouvert en local, ou le texte fourni dans une variable locale string strContenu ?

    Encore ai-je beaucoup de chance, cette fois en description de l'erreur je suis tombé sur une phrase formée d'un sujet, un verbe et un complément, avec les accords en genre et en nombre qui vont bien. Pile poil comme j'ai appris à faire à l'école primaire, donc logiquement je devrais comprendre ce qu'on me dit.

    Cette application vise certes à préparer un fichier sitemap, mais il s'agit d'une application Windows.

    A toutes fins utiles, pour prendre un exemple, strContenu est la source de

    http://www.zailes.org/home.aspx

    Pour le lire dans le fichier sur le disque source, dans C:\Documents and Settings, j'ai lu la clause <@ Page > et la ligne vide qui la suit par deux instructions StreamReader.ReadLine(), et la suite par strContenu = StreamReader.ReadToEnd(). La lecture semble s'être bien faite puisque je peux afficher strContenu dans la fenêtre d'exécution. Il me semble bien que le contenu correspond à la source de la page telle que lue dans le navigateur à l'autre bout.

    L'icône en bas de la page mentionnée peut répondre à certaines questions sur la forme du contenu de strContenu, dans l'optique d'un chargement vers un objet XmlDocument.

    Quelque chose d'évident échappe-t-il à mon attention ?

    L'erreur se présente en fait semble-t-il avec toutes les pages, enfin celles de format aspx ... J'ai exécuté en pas à pas l'exemple TclockEx/TclockEx.aspx. Pareil, serveur distant non disponible.

     

    • Modifié Gloops mercredi 14 juillet 2010 15:23
    samedi 10 juillet 2010 15:18

Réponses

Toutes les réponses

  • Bonjour,

    Encore et toujours un problème capilotracté...

    La méthode XmlDocument.Load() va télécharger la DTD : http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

    Cette dernière retourne l'erreur 503 (suite à une filtre posé sur les serveur de W3C) (plus d'informations : http://www.w3.org/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic).

    Vous devez donc télécharger le contenu de votre document XML dans une chaîne de caractère et supprimer la ligne concernant le DOCTYPE. Ensuite injectez ce contenu XML modifié à la méthode XmlDocument.LoadXml().

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    • Marqué comme réponse Alex Petrescu jeudi 15 juillet 2010 13:21
    lundi 12 juillet 2010 07:16
    Modérateur
  • Rhâaaa !

    Donc, poursuivre la même démarche qui m'avait fait éliminer la clause <@Page>, pour éliminer cette fois la DTD.

    Alors ça ne fait donc pas partie du XML ce truc ? Avec quoi j'ai confondu, donc ?

    Ah ben oui : <?xml version="1.0" encoding="utf-8"?>

    ça doit être ça la nuance entre XML et XHTML.

    Bon, il faut dire que j'ai perdu mes cheveux, alors ça doit être pour ça, quand il y a un problème capillotracté, je ne vois pas toujours la solution :)

     

    mardi 13 juillet 2010 13:06
  • Bonjour,

    Cela fait parti du XML. Mais le problème c'est que la DTD est téléchargé à chaque fois que l'on veut parser/vérifier le document XML. Donc imaginez que sur Terre, si 100 millions de processus télécharge à chaque fois la DTD toutes les secondes, la bande passante et les serveurs du W3C explose.

    Une solution, est d'héberger la DTD chez vous et corriger le lien.

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 14 juillet 2010 10:17
    Modérateur
  • Effectivement, merci, voilà qui rafraîchit bien les idées.

    Alors en enregistrant en local le code de la page et en mettant de côté ce qui peut être mis de côté, j'ai pu lire la page en xml. Quelques surprises au passage, comme la nécessité de supprimer & nbsp ; (sans les espaces) car ce code n'est pas reconnu dans ce contexte, et quelques bricoles de ce style.

    Maintenant apparaît un autre problème capillotracté. C'est là que je prends conscience qu'en dépit de quelques ressemblances lors d'un rapide coup d'œil, il y a de sérieuses nuances entre la source d'une page aspx et la même page une fois servie au lecteur.

    Par exemple, pour arriver à lire en xml la source aspx, il faudrait que je ponde une usine à gaz pour gérer les balises <a> incluses dans le texte d'un contrôle -certes il est plus orthodoxe de les mettre dans un contrôle Hyperlink, mais c'est moins facile à intégrer dans un texte au sein d'une ressource.

    Donc j'imagine que le moyen le plus propre de s'en sortir à ce stade serait non de lire les sources aspx avec un projet indépendant, mais de faire usage de la réflexion au sein du site web. Ou alors parcourir l'arborescence non dans les sources, mais sur le site en ligne si il est à jour (puisque là la forme correspond à celle que j'ai testée).

    Pour tout dire, la question garde un intérêt cursif, dit autrement elle est intéressante à titre d'exercice, cela étant pour ce qui est de mon plan de site j'ai recouru avant-hier à la méthode "marteau-burin", c'est-à-dire repérer la balise "<TITLE" dans la conversion en majuscules de la source, puis la fin de ladite balise, ensuite la balise "</TITLE", et j'ai lu entre les deux. Ensuite le même style de gymnastique pour repérer un titre dans les attributs de la balise asp Page au début, et pour finir lire dans les ressources pour les titres qui ont été traduits.

    J'y reviendrai peut-être plus tard pour proposer une automatisation de la préparation d'un plan de site, c'est quand même un exercice suffisamment "bateau" pour essayer de ne pas réinventer l'eau tiède à chaque fois.

    Merci encore pour ... la réactivation de neurones :)

     

    mercredi 14 juillet 2010 15:20
  • Bonjour,

    Par exemple, pour arriver à lire en xml la source aspx, il faudrait que je ponde une usine à gaz pour gérer les balises <a> incluses dans le texte d'un contrôle -certes il est plus orthodoxe de les mettre dans un contrôle Hyperlink, mais c'est moins facile à intégrer dans un texte au sein d'une ressource.
    Votre problèmatique d'origine est de parser une page générée XHTML ou une page ASPX ?

    Merci encore pour ... la réactivation de neurones :)
    J'en ai perdu pas mal à cause de vous, après avoir "tracté" mes cheveux, en essayant de trouver votre problème d'origine ;-)

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 14 juillet 2010 15:30
    Modérateur
  • J'en suis bien désolé.

    C'est vrai que je parlais de XHTML, et c'est d'ailleurs là que c'est plus logique de s'attendre à pouvoir lire en XML. Et alors du coup, ça y est c'est fait.

    J'ai pris conscience tardivement que lire la source aspx, ce n'était pas pareil -probablement était-ce même une conceté, comme dit quelqu'un de célèbre.

    En fait, lancer une instance de Visual Studio avec le site, et avec une autre lire sur localhost, en transmettant l'adresse là où il faut, ça ne doit pas être la mer à boire. Je crois que je vois comment je m'y prendrai, d'ailleurs ce sera vraisemblablement plus simple, puisqu'il n'y aura plus qu'un emplacement où lire le titre, pour chaque langue -la balise TITLE, qui se trouvera même être un nœud xml, facile à viser en XPATH.

     

     


    mercredi 14 juillet 2010 16:18
  • Il y a une page 2, là-dessus ?

    J'ai reçu une alerte il y a une heure mais je ne vois rien de nouveau ...

     

    jeudi 15 juillet 2010 14:28
  • Bonjour,

    Pas de panique, c'est juste un modérateur qui a marqué un post comme réponse.

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    jeudi 15 juillet 2010 20:14
    Modérateur
  • Ah, d'acc.

    Ah ça la fait même apparaître deux fois, maintenant.

     

    jeudi 15 juillet 2010 20:25
  • Bonjour,

    Ah ça la fait même apparaître deux fois, maintenant.
    Un ricard de trop ? ;-)

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    jeudi 15 juillet 2010 20:26
    Modérateur