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#):
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 <Livre> <titre>lala</titre> <auteur>lala</auteur> <edition>lala</edition> <illustrateur>lala</illustrateur> <annee> </annee> </Livre>
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) :
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>
- 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....
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...
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);
Quelqu'un a-t-il une idée ? Merci d'avance.
Partager