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

XSL/XSLT/XPATH XML Discussion :

[XML/XSL/XSD] Ordre des balises pour vérification


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 38
    Par défaut [XML/XSL/XSD] Ordre des balises pour vérification
    Bonjour à tous!

    Après avoir énormément paufiné les cours sur XPath (encore merci pour le nom!) j'ai pu modifier directement tout un tas de contrôle et de calculs qui était réalisé par un code en VB (division, valeurs conditionnées par des IF ou des Choose, tests sur balises vides, etc.).

    Mon fichier XML de sortie est donc vraiment pas mal! Par contre, avant traitement final, il doit passer par un fichier XSD (non modifiable). Et dans ce fichier XSD, l'ordre des balises doit impérativement être respecté.

    J'ai tenté d'agencer les balises "template" du XSL pour répondre à l'ordre attendu par le XSD, mais je me suis aperçu que ce n'est pas l'ordre du template qui importe, mais celui du fichier XML d'entrée.

    Du coup, quelle est la meilleure solution pour remettre les balises dans l'ordre attendu par le XSD?
    - Remodifier le fichier XML par le code VB (ouch...)?
    - Repasser par un nouveau XSL?
    - Autre (encore une fois, avec tout qui se mélange dans ma tête, j'ai du mal à envisager d'autres solutions)?

    Merci d'avance pour le coup de main

    Un petit exemple:
    Fichier d'entrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <NOM>DUPOND</NOM>
    <PRENOM>Jean</PRENOM>
    Fichier de sortie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <NOM>DUPOND</NOM>
    <PersonID>DUPOND Jean</PersonID>
    <PRENOM>Jean</PRENOM>
    Ordre dans le fichier XSD:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xs:all>
         <xs:element type="xs:string" name="PRENOM"/>
         <xs:element type="xs:string" name="NOM"/>
         <xs:element type="xs:string" name="PersonID"/>
    </xs:all>

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    Le XSD que tu nous montres n'impose aucun ordre. <xs:all> te laisse libre de mettre les éléments dans l'ordre que tu veux. C'est <xs:sequence> qui impose un ordre.

    Mais si tu veux respecter un ordre précis, il suffit de faire en sorte que tes templates XSLT imposent eux-même l'ordre des éléments qu'ils contiennent, au lieu de respecter celui du XML.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:template match="personne">
      <personne>
        <xsl:apply-templates select="prenom"/>
        <xsl:apply-templates select="nom"/>
        <person-id><xsl:value-of select="concat(nom, ' ', prenom)"/></person-id>
      </personne>
    </xsl:template>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 38
    Par défaut
    Ah oui en effet, je n'ai pas pris les bonnes données dans le XSD

    Apparemment, l'utilisation de sequence a été choisi pour spécifier qu'une balise peut être absente:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <xs:sequence>
    			<xs:element type="xs:string" name="NOM"/>
    			<xs:element type="xs:string" name="PRENOM"/>
    			<xs:element type="xs:string" name="PersonID"/>
    			<xs:element type="xs:string" name="ADRESSE" minOccurs="0"/>
    </xs:sequence>
    Je vais essayer d'appliquer de nouveaux templates dans mon XSL pour le remettre en forme. Merci pour l'info!

    EDIT: Parfait, il a fallu que je revois toutes les balises du XSL, mais comme j'avais conservé une copie de ma tentaive pour tout agencer, je m'en sors sans trop de complications!
    C'est finalement tout bête, ou en tout cas, beaucoup plus clair dans mon esprit!

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 38
    Par défaut
    Tiens d'ailleurs, plutôt que d'ouvrir un nouveau topic pour une simple question, je vais la poser directement ici: Est-il possible de charger des données contenues dans un autre fichier (un fichier de config par exemple).

    L'idée étant de créer une balise spécifique avec l'information contenue dans le fichier (genre config.ini).

    XML d'entrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <NOM>DUPOND</NOM>
    <PRENOM>Jean</PRENOM>
    Fichier de config.ini:
    XML de sortie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <NOM>DUPOND</NOM>
    <PRENOM>Jean</PRENOM>
    <DATABASE>LDAP1</DATABASE>

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Avec un .ini, non. (Enfin, c'est faisable en XSLT 2.0 mais pas bien malin.)

    Il y a essentiellement deux façons de faire :
    - Passer des paramètres à la feuille XSTL.

    Du coup ta feuille aura un truc genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
      <xsl:param name="database"/>
    et s'en servirait comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="personne">
      <personne>
        <xsl:apply-templates/>
        <database><xsl:value-of select="$database"/></database>
      </personne>
    </xsl:template>
    Encore faut-il que ton système soit capable de passer des paramètres au moteur XSLT. Et dans ce cas-là, c'est ton système qui va aller lire la config et la transmettre. Ce qui te permet d'utiliser un .ini ou ce que tu veux, de manière assez propre.

    OU

    - utiliser document() pour lire un autre fichier XML.

    Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="config" select="document('config.xml')/*/param"/>
    Avec config.xml qui contiendrait un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <config>
      <param name="database">ldap</param>
      <param name="protocol">http</param>
    </config>
    et qui s'utiliserait comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="personne">
      <personne>
        <xsl:apply-templates/>
        <database><xsl:value-of select="$config[@name='database']"/></database>
      </personne>
    </xsl:template>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 38
    Par défaut
    Bonjour thelvin,

    Après mûre réflexion (la nuit porte conseil), je pense que je vais utiliser un mélange entre les deux solutions.

    Avec mon code en VB, je vais générer un fichier XML à partir des informations contenues dans le fichier ini (car celui ci est utilisé par d'autres outils). Du coup, je n'ai qu'à modifier mes XSL pour intégrer le contenu de ce fichier XML.

    Bon ben y'a plus qu'à, encore merci pour toutes les infos!

    EDIT: J'ai un ooups... Lors de l’exécution, j'ai l'erreur suivante:

    L'exécution de la fonction 'document()' est interdite. Utilisez la propriété XsltSettings.EnableDocumentFunction pour l'activer

    Je suis en XML 1.0, est XSL 3.0, si ca peut aider.

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

Discussions similaires

  1. Validation XML par XSD et ordre des balises
    Par Bz dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 03/06/2015, 21h19
  2. [JAXB] Ordre des balises dans le xml généré - @XmlType(propOrder - IllegalAnnotationsException
    Par OrigineDeLaVie dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 29/08/2013, 16h52
  3. XML contenu des balises pour des images
    Par boitalette dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 18/10/2009, 18h36
  4. [XSLT]Modifier l'ordre des balises XML
    Par Philos15 dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 18/10/2006, 09h54
  5. [XML] validation de fichier XML:l'ordre des balises compte ?
    Par longbeach dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 04/09/2005, 18h53

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