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.