Bonjour,
je rencontre actuellement des problèmes avec l'utilisation de fichier xsd, xsl, confxml...
Voici mon fichier xsd :
Code :
- <?xml version="1.0" encoding="utf-8"?>
- <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <xsd:element name="configuration" >
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element ref="zonepubliabledematprohaut"/>
- <xsd:element ref="zonepubliabledematprobas"/>
- </xsd:sequence>
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="zonepubliabledematprohaut">
- <xsd:complexType>
- <xsd:attribute name="nomzone" use="required" type="xsd:string"/>
- <xsd:attribute name="valeur" use="required" type="xsd:string"/>
- </xsd:complexType>
- </xsd:element>
- <xsd:element name="zonepubliabledematprobas">
- <xsd:complexType>
- <xsd:attribute name="nomzone" use="required" type="xsd:string"/>
- <xsd:attribute name="valeur" use="required" type="xsd:string"/>
- </xsd:complexType>
- </xsd:element>
- </xsd:schema>
|
Voici le fichier xsl :
Code :
- <?xml version="1.0"?>
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
- <xsl:output method= "xml" version="1.0" encoding="ISO-8859-1" omit-xml-declaration="no" standalone="yes" indent="yes" />
- <xsl:template match="/">
- <xsl:apply-templates select="configuration" />
- </xsl:template>
- <xsl:template match="Configuration">
- <configuration>
- <xsl:apply-templates />
- </configuration>
- </xsl:template>
- <xsl:template match="Config_Item">
- <xsl:variable name="upperlow" select="translate(Config_Nom,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>
- <xsl:element name ="{$upperlow}">
- <xsl:attribute name = "nomzone">
- <xsl:if test="./Config_Nomzone">
- <xsl:value-of select="./Config_Nomzone" />
- </xsl:if>
- <xsl:if test="./Config_Logo">
- <xsl:value-of select="./Config_Logo/@identifiant" />
- </xsl:if>
- <xsl:if test="./Config_Document">
- <xsl:value-of select="./Config_Document/@identifiant" />
- </xsl:if>
- </xsl:attribute>
- <xsl:attribute name = "valeur">
- <xsl:if test="./Config_Valeur">
- <xsl:value-of select="./Config_Valeur" />
- </xsl:if>
- <xsl:if test="./Config_Logo">
- <xsl:value-of select="./Config_Logo/@identifiant" />
- </xsl:if>
- <xsl:if test="./Config_Document">
- <xsl:value-of select="./Config_Document/@identifiant" />
- </xsl:if>
- </xsl:attribute>
- <xsl:apply-templates />
- </xsl:element>
- </xsl:template>
- <xsl:template match="comment() | processing-instruction() | text()" />
- </xsl:stylesheet>
|
Voici mon fichier confxml :
Code :
- <Configuration>
- <Config_Item>
- <Config_Description/>
- <Config_Nom>ZonePubliableDematProHaut</Config_Nom>
- <Config_Nomzone>IncitationHaut</Config_Nomzone>
- <Config_Valeur>SMC_ZONE_SE_20101014032030</Config_Valeur>
- </Config_Item>
- <Config_Item>
- <Config_Description/>
- <Config_Nom>ZonePubliableDematProBas</Config_Nom>
- <Config_Nomzone>IncitationBas</Config_Nomzone>
- <Config_Valeur>SMC_ZONE_SE_20101014032031</Config_Valeur>
- </Config_Item>
- </Configuration>
|
Voici le code ou je récupère mon fichier de config, le transforme grâce au fichier xsl, puis le valide avec le fichier xsd :
Code :
- File myFile = new File(configXML);
- boolean filePresent = myFile.exists();
- if (!filePresent) {
- if (log.isInfoEnabled()) {
- log
- .info("Le fichier de configuration XML Documentum n'est pas present dans "
- + configXML);
- }
- } else {
- if (log.isInfoEnabled())
- log
- .info("Le fichier de configuration XML Documentum a été trouvé" );
- String xmlTemp = "";
- try {
- // Lecture du fichier de configuration
- FileReader xmlEntree = new FileReader(configXML);
- xmlTemp = XmlTraitement.transforme(xmlEntree,
- XmlConstants.PATH_XSL_ETAPE1);
- XsdValidatorHandler validation = XmlTraitement.xmlValide(
- xmlTemp, XmlConstants.PATH_VALIDATION_XSD_ETAPE1);
- log.debug("################# "+xmlTemp);
- } catch (Exception e) {
- log.error(e.getCause());
- }
- InputStream is = null;
- if (!"".equals(xmlTemp)) {
- try {
- is = new ByteArrayInputStream(xmlTemp.getBytes("UTF-8" ));
- } catch (UnsupportedEncodingException e) {
- log.error(e.getCause());
- }
- }
- if (is != null) {
- HashMap<String, Class<?>> alias = new HashMap<String, Class<?>>();
- alias.put("configuration", Configuration.class);
- alias.put("zonepubliabledematprohaut", ZonePubliableDematProHaut.class);
- alias.put("nomzone", String.class);
- alias.put("valeur", String.class);
- alias.put("zonepubliabledematprobas", ZonePubliableDematProBas.class);
- alias.put("nomzone", String.class);
- alias.put("valeur", String.class);
- conf = (Configuration) XstreamUtils.getObjectFromXML(is, alias);
- listeConfiguration.add(conf);
|
Ceci fonctionne très bien.
Cependant, ce que je souhaite c'est pouvoir mettre soit plusieurs balises <Configuration> ou plusieurs balises <zonepubliabledematprohaut> ou <zonepubliabledematprobas> dans mon fichier. Mais c'est la que je n'y parviens pas!
Je sais pas si j'ai été très clair?!!
Si quelqu'un a une idée...
Merci
Message édité par benjibul le 06-05-2011 à 09:57:49