From: LOPERA Stéphanie (stephanie.lopera@lafon.fr)
Date: 18/02/2004 - 10:19
Bonjour,
Mon script a déja fonctionné pour faire une validation (il y a un certain
temps !). Aujourd'hui, la validation échoue à chaque fois alors que sous
XMLSpy, la validation est OK.
J'utilise MSXML4.0.
Voici un extrait du script (JScript) :
------------------------------------------------------------
function valide(xmlResult, fichierXSD) {
try {
// chargement fichier XML
var xmlDoc1 = new ActiveXObject("Msxml2.DOMDocument.4.0");
xmlDoc1.async = false ;
xmlDoc1.validateOnParse = false ;
var result_loadxml = xmlDoc1.loadXML(xmlResult);
//ajout de l'attribut x-schema au fichier XML
var root, newAtt, namedNodeMap ;
root = xmlDoc1.documentElement;
newAtt = xmlDoc1.createAttribute("xmlns");
namedNodeMap = root.attributes ;
namedNodeMap.setNamedItem(newAtt);
// chargement fichier XSD
var xmldoc2 = new ActiveXObject("Msxml2.DOMDocument.4.0");
var schema = new ActiveXObject("Msxml2.XMLSchemaCache.4.0");
schema.add("", fichierXSD);
//association du schema xsd au fichier xml
xmldoc2.schemas = schema;
// chargement seulement si schema associe valide
var result2 = xmldoc2.loadXML(xmlDoc1.xml);
ok = xmldoc2.validate();
// desallocation de la memoire
xmlDoc1 = null ;
xmlDoc2 = null ;
schema = null ;
if (ok.errorCode == 0) { return true ; }
else { return false ; }
}
catch (e) {
// si il y a une erreur (doc xml mal forme), on retourne false
return false ;
}
}
------------------------------------------------------------
Au cas où ça peut servir, en entrée, mon flux XML est (en chaine de car sans
retour chariot) :
------------------------------------------------------------
<?xml version="1.0"?>
<VenteCarte>
<dd>2004-16-02T23:30:00+01:00</dd>
<tdCarte>
<tc>CLASSIQUE</tc>
<cu>12</cu>
<e>10.10</e>
</tdCarte>
<tdCarte>
<tc>CLASSIQUE</tc>
<cu>24</cu>
<e>20.24</e>
</tdCarte>
</VenteCarte>
------------------------------------------------------------
Mon schéma est :
------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:include schemaLocation="TYPES.xsd"/>
<xs:element name="VenteCarte">
<xs:complexType>
<xs:group ref="td"/>
</xs:complexType>
</xs:element>
<!-- Description d'une carte -->
<xs:group name="td">
<xs:sequence>
<xs:element ref="dd"/>
<xs:sequence maxOccurs="20">
<xs:element ref="tdCarte"/>
</xs:sequence>
</xs:sequence>
</xs:group>
<!-- Date de mis à jour -->
<xs:element name="dd" type="xs:dateTime" />
<!-- Description d'une carte -->
<xs:element name="tdCarte">
<xs:complexType>
<xs:sequence>
<xs:element ref="tc"/>
<xs:element ref="cu"/>
<xs:element ref="e"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Tarif de vente de la carte -->
<xs:element name="TARIF_EUROS" type="montant" />
<!-- Nombre d'unités préchargées -->
<xs:element name="cu" type="nb_unites" />
<!-- Type de la carte : Flotte ou particulier -->
<xs:element name="tc" type="type_carte" />
<!-- Tarif a appliquer en euros -->
<xs:element name="e" type="tarif" />
</xs:schema>
------------------------------------------------------------
Fichier types.xsd :
------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<!-- Nombre d'unités de carte -->
<xs:simpleType name="nb_unites">
<xs:restriction base="xs:byte">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="99"/>
</xs:restriction>
</xs:simpleType>
<!-- Tarif à appliquer en euro -->
<xs:simpleType name="tarif">
<xs:restriction base="xs:decimal">
<xs:fractionDigits value="2"/>
<xs:minInclusive value="0.01"/>
<xs:maxInclusive value="99.99"/>
</xs:restriction>
</xs:simpleType>
<!-- Type de carte -->
<xs:simpleType name="type_carte">
<xs:restriction base="xs:string">
<xs:enumeration value="CLASSIQUE"/>
<xs:enumeration value="FLOTTE"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
------------------------------------------------------------
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:05 UTC
webmaster@xmlfr.org
|