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 :

[XSLT] Recursivité et insertion


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [XSLT] Recursivité et insertion
    Bonjour,

    Tout d'abord merci de prendre le temps de lire le message et d'essayer d'y repondre, car je suis vraiment en galère...

    Voici l'interrogation :

    Je dispose d'une bibliothèque sous ce format :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    <?xml version="1.0" encoding="utf-8"?>
    <bookcases>
    	<bookcase name="a">
    		<shelf>
    			<pos>1</pos>
    			<type>small</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>2</pos>
    			<type>medium</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>3</pos>
    			<type>medium</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>4</pos>
    			<type>medium</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>5</pos>
    			<type>large</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>6</pos>
    			<type>large</type>
    			<width>600</width>
    		</shelf>
    	</bookcase>
    	<bookcase name="b">
    		<shelf>
    			<pos>1</pos>
    			<type>small</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>2</pos>
    			<type>small</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>3</pos>
    			<type>medium</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>4</pos>
    			<type>large</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>5</pos>
    			<type>large</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>6</pos>
    			<type>large</type>
    			<width>600</width>
    		</shelf>
    	</bookcase>
    	<bookcase name="c">
    		<shelf>
    			<pos>1</pos>
    			<type>medium</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>2</pos>
    			<type>medium</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>3</pos>
    			<type>medium</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>4</pos>
    			<type>medium</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>5</pos>
    			<type>medium</type>
    			<width>600</width>
    		</shelf>
    		<shelf>
    			<pos>6</pos>
    			<type>large</type>
    			<width>600</width>
    		</shelf>
    	</bookcase>
    </bookcases>

    Et d'une liste de livre classifiée et ordonnée comme suit :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?xml version='1.0' ?>
    <mandybooks>
                 <class name="music" size="586" typeOfShelf="large">
    <book   class="music">
    		<author>vernon, Paul</author>
    		<title>A History of the Portuguese Fado</title>
    		<type>Medium</type>
    	</book><book class="music">
    		<author>Russell, Bill</author>
    		<title>Bill Russell's American Music</title>
    		<type>Large</type>
    	</book><book class="music">
    		<author>Vail, Ken</author>
    		<title>Bird's Diaries</title>
    		<type>Large</type>
    	</book>
        ....
    </class
    <class name="history usa" size="493" typeOfShelf="large"><book class="history usa">
    <book>...</book>
    ...
    </class>
     
    ...
     
    <class name="mystery" size="591" typeOfShelf="medium"><book class="mystery">
    <book>...</book>
    ...
    </class>
     
    <class name="humour" size="507" typeOfShelf="medium"><book class="humour">
    <book>...</book>
    ...
    </class>
     
    <class name="mystery australia" size="495" typeOfShelf="small"><book class="mystery australia">
    <book>...</book>
    ...
    </class>
     
    <class name="mystery italy" size="225" typeOfShelf="small"><book class="mystery italy">
    <book>...</book>
    ...
    </class>
    </mandybooks>





    Le but est de loader chaque élement class dans les éléments shelf du premier document (un <class ne peut jamais etre coupé en deux et l'attribut typeOfShelf doit correspondre à l'attribut type de l'élement <shelf> où il doit etre loadé).
    Ma première technique a été de créer un template qui peut créer un groupe de N class dont la somme des attributs size tient dans une taille fixée, en utilisant la recursion basique.

    J'avoue que je suis à présent perdu, puisqu'une fois qu'on a parcouru tous les <class> et qu'on doit passer à l'étagère suivante, on doit se souvenir des étagères qui ont été remplies et des <class> qui ont été déjà rangées.

    On m'a assuré que la solution restait simple à mettre en oeuvre, mais j'avoue que je patauge vraiment ... (Je ne suis pas tres bon en XSLT certes, mais 1 semaines sans avancer, c'est difficile ...)

    Merci d'avance pour ceux qui réfléchiront à mon problème.

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    A première vue c'est une version de regroupement ou d'elimination de doublon (pas present sur deux etagères)non ?
    tu as regardé ça
    http://xml.developpez.com/faq/?page=3#xslt_regroup

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    En fait, cela paraît etre regroupement et doublon, mais ca ne l'est pas ...

    Le truc c'est qu'il y a deux approches. La première, tu parcours les étagères, et à chaque : tu groupes des class de books jusqu'à ce que tu arrives à la taille maximale possible. Ensuite, tu passe à la suivante et tu dois refaire un groupe tout en ne prenant pas ceux que tu as deja mis dans l'étagere precedente ...

    La seconde c'est de partir en parcourant les class (avec position() > 1 en prédicat), et de loader dans les étagères chaque classe une par une. Mais la encore plus galere, et je pense impossible à faire en XSLT, tu dois te souvenir du taux de remplissage de chaque étagere de chaque bookcase !

    Ok, je veux bien appliquer l'une ou l'autre, ou encore une à laquelle je n'ai pas encore passé, mais comment faire ?! ..

    Bref ... C'est une horreur ...

  4. #4
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927

Discussions similaires

  1. transfo XSLT --> HTML et insertion d'IMG
    Par joejoe1 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 18/05/2011, 18h02
  2. [XSLT] recursivité, evaluation d'une expression
    Par lol88 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 03/12/2009, 10h11
  3. [Debutant XSLT] recursivité dans le xml ?
    Par zax-tfh dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 10/12/2005, 17h41
  4. [Trigger] -recursivité before|after insert
    Par jacquesh dans le forum Oracle
    Réponses: 3
    Dernier message: 24/11/2005, 15h10
  5. Insertion de noNamespaceSchemaLocation avec XSLT
    Par sapjo dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/10/2004, 16h48

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