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 :

[XPATH/XSL][XSLT2.0] Transformation d'un XML structuré tel un fichier "plat"


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Par défaut [XPATH/XSL][XSLT2.0] Transformation d'un XML structuré tel un fichier "plat"
    Bonjour tout le monde,

    Je me penche actuellement sur une requete XPATH assez complexe (enfin, pour mon niveau) :

    J'ai un xml de la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <info....>
    <entete....>
    <detail....>
    <detail....>
    <entete....>
    <detail....>
    <entete....>
    <entete....>
    On le qualifiera de "plat" je l'avoue mais ca n'est pas de mon ressort =)
    J'ai modélisé un XMLSchema permettant de valider ce XML via un xsd:group défini de la sorte (<entete>,<detail>*).

    Il me faut maintenant transformer cette structure de la maniere suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <info2...>
    <entete2...>
    <detail2...>
    <detail2...>
    <entete2...>
    <detail2...>
    <pied2...>
    <entete2...>
    Ici on epure les noeuds <entete> et <detail> du précédent XML mais on effectue également un tri des groupes (entete, detail*) selon plusieurs sous-noeud contenus dans <entete>. En plus, à chaque changement de la valeur de tri, on insere un noeud <pied> inspiré d'informations situées dans des sous noeuds de la derniere entete <entete>

    Je parviens sans problème à trier les entetes, les grouper selon les facteurs de tri et à insérer le pied en fin de groupe, toutefois, je ne parviens pas, au sein de chaque noeud entete traité, à récupérer les noeud détail qui lui sont rattachés. A noter pour une réelle difficulté du problème, qu'il n'existe aucun lien fonctionnel reliant les noeuds <entete> de <detail>. Seul l'ordre défini l'appartenance d'un noeud <detail> a un noeud <entete>.

    Je reste à disposition pour toutes questions ou précisions si c'est mal expliqué et je suis tout ouïe à vos propositions.

    Merci d'avance pour votre aide !

  2. #2
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    ton problème est un peu différent de celui exposé dans ce post, mais les techniques à base de following-sibling et de generate-id() qui y sont mentionnées te seront utiles pour le résoudre.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre émérite
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Par défaut
    est ce que tu peux envoyer des exemple de ton xml plus réels? oû je peux voir ou commencent/finissent les élements au lieu de mettre des "....."

  4. #4
    Membre émérite Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Par défaut
    Tout d'abord, merci GrandFather pour ton aide, le lien m'a été très utile et je pense tenir le bon bout... toutefois, j'ai un souci. Utilisant un AGL, je n'ai pas la possibilité d'utiliser tout ce que je veux mais plutôt des fonctions qui me sont proposées et apparemment, ici, il ne comprend pas la fonction generate-id(...). Y a-t-il un autre moyen de constater l'égalité de deux noeud ?

    valal, désolé de ne pas être très explicite mais je tiens uniquement a conserver un côté "generique" à ma question. Toutefois, si ta question repose sur la structure du schema XML, sache qu'il n'y a pas d'arborescence. Tu retrouveras à chaque fois que j'ai mis "..." une fermeture de balise.

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <entete>
         <sous-entete />
    </entete>
    <detail>
         <sous-detail />
    </detail>
    <detail>
         <sous-detail />
    </detail>
    <entete>
         <sous-entete />
    </entete>
    <detail>
         <sous-detail />
    </detail>
    <entete>
         <sous-entete />
    </entete>
    C'est vraiment un fichier plat, dans lequel on a mis des balises XML à mon goût mais il faut faire avec ! j'espere que ca t'aidera plus !

    Merci encore à vous deux pour votre aide !

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Par défaut
    si je comprends, tu es sur un noeud "entete" A et tu souhaite recuperer (traiter) tous les noeuds "detail" entre ce noeud A et le noeud "entete" B qui est en dessous de lui?

  6. #6
    Membre émérite Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Par défaut
    oui exactement, et sans la fonction generate-id pour identifier un noeud puisqu'apparemment l'outil que j'utilise ne me propose pas cette fonction.

    un simple = des deux noeuds ne suffit pas à remplacer le generate-id (ce qui semble logique sinon la fonction n'existerait pas, mais j'ai essayé quand même).

    Donc actuellement le following-sibling me permet de récupérer les lignes détails qui suivent mais il me manque le filtre d'arrêt au prochain noeud entete.

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

Discussions similaires

  1. [XML] Structure d'un fichier XML
    Par Sytchev3 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/05/2012, 10h32
  2. Réponses: 1
    Dernier message: 28/06/2007, 02h24
  3. [XSL] transformer un document xml dans le format pdf
    Par soumou dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/11/2006, 19h39
  4. [DOM] Transformation d'un xml avec un xsl
    Par pistache42 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 12/07/2006, 15h39
  5. [XSL] Transformation de document xml
    Par youbyoub dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/04/2005, 16h13

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