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 :

Validation doc XML avec DTD


Sujet :

C#

  1. #1
    Membre à l'essai Avatar de ikar_AAA
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 18
    Points
    18
    Par défaut Validation doc XML avec DTD
    Bonjour,

    J'ai un petit problème, Je n'arrive pas valider un document XML à l'aide d'une DTD (externe au fichier XML) avec XmlReader.

    J'ai l'erreur suivante :

    "For security reasons DTD is prohibited in this XML document. To enable DTD processing set the DtdProcessing property on XmlReaderSettings to Parse and pass the settings into XmlReader.Create method."

    Info: je suis sous VB 2010 Express


    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
     
    public partial class Default2 : System.Web.UI.Page
    {
        private StringBuilder _builder = new StringBuilder();
            protected void Page_Load(object sender, EventArgs e)
            {
                string xmlPath = Server.MapPath("~/App_Data/Product.xml");
                XmlReader reader = null;
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventHandler);
                settings.DtdProcessing = DtdProcessing.Parse;
                settings.ValidationType = ValidationType.DTD;
                settings.Schemas.Add(null, Server.MapPath("~/App_Data/Product.dtd")); //ligne du XmlException
                reader = XmlReader.Create(xmlPath, settings);
                while (reader.Read())
                    while (reader.Read())
                    {
                    }
                    if (_builder.ToString() == String.Empty)
                        Response.Write("DTD Validation completed successfully.");
                    else
                        Response.Write("DTD Validation Failed. <br>" + _builder.ToString());
                    reader.Close();
               }
        void ValidationEventHandler(object sender, ValidationEventArgs e)
        {
            _builder.Append("Validation error: " + e.Message + "<br>");
        }
    }
    Avez vous des idées ?

    Merci d'avance.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    C'est vraiment bizarre car tu as bien :

    settings.DtdProcessing = DtdProcessing.Parse;

    Dans ton code, et tu le passes bien en paramètre.

    C'est peut-être à cause de droit admin quelconque ?

  3. #3
    Membre à l'essai Avatar de ikar_AAA
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Olomius Voir le message
    Bonjour,

    C'est vraiment bizarre car tu as bien :

    settings.DtdProcessing = DtdProcessing.Parse;

    Dans ton code, et tu le passes bien en paramètre.

    C'est peut-être à cause de droit admin quelconque ?
    Merci Olomius,

    Je viens de changer l’emplacement du fichier XML et DTD.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string xmlPath = (@"C:\Developpement\Test_class_Xml\Product.xml");
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    settings.Schemas.Add(null, @"C:\Developpement\Test_class_Xml\Product.dtd");
    J'ai mis les droits full utilisateur et j'ai toujours la même erreur :-/

    Info supplémentaire, j'ai un warning dés le lancement du debuger :
    The XML editor tried to convert this DTD to XSD so it can provide validation and intellisense while you type, but it could not create a valid XSD schema. Perhaps this DTD uses constructs that do not map to XSD. You may be able to get more information about the problem by using the Create Schema command.
    Je sèche grave

  4. #4
    Membre à l'essai Avatar de ikar_AAA
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Par-contre, j'avais déjà essayé la fonction écrit en bas du post
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ProhibitDtd = false;
    Mais VB m'affiche que la fonction est obsolete et la doc stipule qu'il faut utiliser DtdProcessing.Parse

    Si tu as d'autres idées, je suis preneur.
    Mon but étant d'afficher dans une page web des doc. au format XML(validé par une DTD externe)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 19
    Points
    19
    Par défaut
    Je pense que tu ne peux juste pas le faire, car c'est une politique appliquée sur le fichier.

    Maintenant, s'il n'y en a aucune, je vois pas ce qu'il faut faire d'autre car tu as fait ce qu'il fallait faire ...

  6. #6
    Membre à l'essai Avatar de ikar_AAA
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Merci pour ton aide Olomius.
    Ca confirme ce que je pensai.... je ne suis pas fou non de zeus

    Au plaisir de te rendre la pareille.

Discussions similaires

  1. [DTD] Valider un XML avec Oracle
    Par ghostdog dans le forum Valider
    Réponses: 5
    Dernier message: 14/12/2012, 14h25
  2. [JDOM] Validation fichier XML avec DTD grace à JDOM ?
    Par ederf dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 20/04/2009, 12h06
  3. Valider un XML avec une DTD externe
    Par Pub69 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 05/07/2006, 16h35
  4. [DTD] Valider fichier xml avec une DTD externe
    Par Tail dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 26/06/2006, 18h14
  5. Réponses: 3
    Dernier message: 27/01/2004, 16h15

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