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

Valider XML Discussion :

Valider un XML avec des retours chariot [XSD]


Sujet :

Valider XML

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut Valider un XML avec des retours chariot
    Bonjour,


    Voilà j'ai un petit problème qui semble tout bête pourtant. Je souhaite valider un document XML de ce type avec un XSD (à partir d'un programme en C#):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <Livre>
        <titre>lala</titre>
        <auteur>lala</auteur>
        <edition>lala</edition>
        <illustrateur>lala</illustrateur>
        <annee>
        </annee>
      </Livre>
    Dans cet exemple c'est la balise <annee> qui pose problème à cause du retour chariot. J'ai définie la balise année avec un type personnalisé ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xs:simpleType name="IntVide">
        <xs:union memberTypes="xs:integer">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value=""/>
            </xs:restriction>
          </xs:simpleType>
        </xs:union>
      </xs:simpleType>
    Il accepte donc les integer et rien. Or les retour chariot ne passent pas. Voici les solutions les plus cohérentes que j'ai déjà essayé (il y en a d'autres plus farfelues dont je ne me souviens pas) :
    • Dans le XSD : ajout de la ligne "<xs:whiteSpace value="replace"/>" dans la définition du type (j'ai essayé replace et collapse) mais ça ne doit pas fonctionner pour les unions de type, ou seulement sur les types string d'origine.
    • Dans mon programme C#, je transforme mon fichier xml en string, puis je fais un replace des "\r\n", je transforme ensuite mon string en XML, mon retour chariot y est toujours, comme si le c# ne le détectait pas. D'autant plus que lorsque j'affiche ma chaîne string, elle ne fait pas de retour charriot....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    XmlDocument xml = new XmlDocument();
    String contenuXML;
    xml.Load(monfichier.xml);
    contenuXML = xml.OuterXml;
    contenuXML.Replace("\r\n", "");
    xml.LoadXml(contenuXML);
    xml.Save(monfichier.xml);
    J'ai l'impression que mon programme c# ne détecte pas le retour chariot contrairement au XSD. Car lorsque j'essais de mettre 3 ou 4 retours chariot à la suite, mon code supprime l'excédent mais me laisse le premier...

    Quelqu'un a-t-il une idée ? Merci d'avance.

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Simplement remplacez cette ligne:
    <xs:enumeration value=""/>
    par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xs:pattern value="\s*" />
    Aussi c'est presque toujours pas une bonne idée de faire ça ou ce genre de manoeuvre
    contenuXML.Replace("\r\n", "");
    fonctionne ou pas; ça ne se justifie presque toujours pas.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 37
    Points
    37
    Par défaut
    Super ça fonctionne très bien !
    Merci, le \s c'est pour les espace, les tabulation et les retour chariot c'est bien ça ?

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    C'est dans le même sens qu'on utilise comme regex: [ \r\n\t]. En gros, c'est bien ça.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/02/2008, 16h21
  2. Ecrire un fichier .txt avec des retours chariot
    Par french-petzouille dans le forum Langage
    Réponses: 9
    Dernier message: 30/03/2007, 20h01
  3. [JSTL 1.0.6] affichage d'un texte avec des retour chariots
    Par clettebou dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 09/08/2006, 10h16
  4. [MSXML][C++] enregistrer avec des retours de lignes
    Par themadmax dans le forum XML
    Réponses: 3
    Dernier message: 15/11/2005, 18h48
  5. [XSD][JAVA] Valider un XML avec un XSD schéma
    Par vad dans le forum Valider
    Réponses: 1
    Dernier message: 17/08/2005, 11h47

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