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 1.1] plein de questions de débutant


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut [XSLT 1.1] plein de questions de débutant
    Bonjour,

    Je vais avoir dans les semaines à venir à faire plusieurs transformations sur un fichier XML degueulasse pour en récupérer un tout propre. Je me suis lancé dans la lecture de livre, tutos et bah xslt c'est bien puissant mais qu'est ce que c'est compliqué

    j'aurais d'abord une question de noob. j'ai un xml contenant des produits et un xml representant des camions. pourrais-je avec un seul xslt faire un troisieme xml indiquant quel produit va dans tel camion? cad un xslt travaille sur deux xml source pour en faire un. j'ai regardé des exemples avec saxon et msxml, on dirait pas mais j'aimerai etre sûr

    ensuite, j'ai dans mon xml de base des produits rangés comme ca
    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
    <produits>
      <item>
        <type>menager cuisine</type>
      </item>
       <item>
        <type>menager jardin</type>
      </item>
       <item>
        <type>jardin menager </type>
      </item>
    <item>
        <type>menager cuisine jardin</type>
      </item>
    <item>
        <type>menager  jardin cuisine</type>
      </item>
    </produits>
    et il faut imaginer qu'il y a des majuscules en plein milieu, des espaces en trop parfois au milieu. j'ai trouvé les methodes pour nettoyer tout ca. Maintenant j'aimerai trouver des types "unique" donc menager+jardin == jardin+menager pour moi
    Comment puis-je qu'importe si cest degeu, nettoyer ce xml pour obtenir une copie propre avec les noms de type remis dans l'ordre. Sachant qu'il n'y a pas d'ordre. je veux que ce soit unique (je ne veux que 3 types differents dans lexemple precedent) et je vois pas trop comment faire

    a la mano ca serait vite fait mais c'est pour un client et je suis pas sûr qu'il adore faire ca chaque semaine :p

    on m'a conseillé a la fin de remplace les espaces pas des underscores pour avoir des entitées uniques et que je peux trier par ordre alphabétique mais faudrait que je rassemble les types.
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Salut,

    pour ce qui concerne le traitement de plusieurs sources XML à la fois, ça ne pose aucun problème avec la fonction XPath document() qui te renvoie le noeud racine du document dont l'URL lui est passée en paramètre.

    Pour ce qui est de la transformation, il faudrait que tu précises un peu les règles qui président à la normalisation : d'abord replacement des mots du type dans le bon ordre (alphanumérique ?), puis regroupement, c'est cela ?
    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
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    merci pour xpath

    pour le regroupement, y a pas de vraie logique. en fait la source d'origine qui passe par plein de transformation avant que j'exige d'eux un XML est un xls rempli à la main par une personne au grand intellect: le chef de service

    ce que j'aimerai, c'est regroupé les produits par type. pour cela, je dois essayer d'avoir un type uniforme.
    j'ai donc des produits
    - menager
    - menager cuisine
    - menager cuisine carrelage
    qui suivent une certaine logique de type de plus en plus précis MAIS la liste n'est définie nulle part.
    le problème est que je peux d'un coup avoir un produit avec le type
    "menager carrelage cuisine". or j'aimerai qu'il soit considéré (ou plutot modifié) en "menager cuisine carrelage"
    et là que débutant en xslt je me pose la question du moyen le plus adapté pour faire ceci. Ceci ne représentant qu'une légère partie de ce que j'aimerai faire au final, je préfèrerai une solution légère mais bon si j'ai pas le choix...


    merci
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    petite précision à la réponse de GF : http://xml.developpez.com/faq/?page=3#xslt_document

    pour le problème de type, pourquoi ne pas utiliser un XSLT "simple" (sur base de substring) pour avoir un modèle du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <types>
       <type>menager</type>
       <type>cuisine</type>
       <type>carrelage</type>
    </types>
    ça te permet de t'affranchir de l'ordre car il n'est pas nécessaires pour les transformations XSLT suivantes...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  5. #5
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    je crois comprendre ce que tu veux dire mais après j'ai besoin de deviner chaque classe unique. les élements du type en soit même je ne les traiterai pas.
    je sais pas si je suis clair. disons pour simplifier que je vais remplacer tous les espaces par un underscore ce qui me donnera des types du genre
    menager_cuisine_carrelage et rien que ca, je sais que cest different de menager_cuisine_toto. avec ta solution, je devrais faire plein de comparaisons. ici, je pense qu'une simple récurence interne pour vérifier que le type existe déjà en me basant sur une comparaison de chaine sera le plus simple.

    maintenant, j'aimerai juste éviter d'avoir
    menager_cuisine_carrelage et menager_carrelage_cuisine car ca bousille mon raisonnement surtout qu'il y a deux erreurs comme ca dans le xml que je pourrai faire à la main mais j'essaie de trouver une solution qui permettra l'erreur humaine et tentera de la corriger.


    un exemple plus simple, pour chaque produit, j'ai un champ type2 qui dit:
    -s'il est petit ou grand
    - lourd
    (c'est pour les colis et le prix de transport)

    donc un produit peut etre
    petit
    grand
    petit lourd
    grand lourd
    et bien sûr on m'a foutu un lourd grand dans le tas.
    ici je connais les catégories donc je peux tester si ca commence par lourd et switcher mais ce n'est p-e pas la solution la plus propre... j'aimerai profiter de votre XP pour apprendre le plus tôt possible à ne pas coder comme un sagouin
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  6. #6
    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 : 47
    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
    Je rejoins swoög, les opérations de chaines en xslt ou xpath c'est pas l'idéal, et ton pb, à la moindre évolution ca va être casse-bonbon complet .

    Tu es vraiment sûr de toi ? L'exemple donné precedemment est bien celui que je conseillerais dans une structure xml et dans ce cas le xslt de transfo est assez simple. Autrement ton pb est soluble mais pas trop envie de me pencher sur une solution "batarde" tant que je ne suis pas sûr que cela soit celle choisie

  7. #7
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    je suis totalement d'accord avec vous et surtout j'aurais fait corriger ces "problemes" à la source si je le pouvais mais bien sûr cela demanderait trop de competences techniques d'avoir un xml propre
    (oui parce que quand leur script arrive à oublier une balise fermante, je kiffe un peu )

    maintenant, de mon coté, c'est un service que je leur rends, et j'ai pas non plus envie de faire un truc qui me prendra la tete pendant des heures pensant à une eventuelle evolutivité. ici, ils veulent une solution (tri des produits dans des camions) ils auront ça. point

    donc là, il s'agit jsute de l'étape "nettoyage" des types en les rendant uniques.
    après je n'ai simplement qu'à les reafficher tel quel, le travail se faisant principalement sur la taille totale pris par les produits de chaque type pour les ranger dans les camions en optimisant la place utilisée.

    donc je m'excuse si je vous fait renoncer à vo preceptes de faire ça propre, mais là, même si je conçois que c'est pas propre, c'est ce que je veux. surtout que j'ai bien galérer pour que les étapes suivantes marchent déjà. donc je devrais tout refaire et je ne pense pas que la suite soit pour autant mal codée. me restera juste à faire ça dans un xslt unique et jouer avec les variables mais faut encore que je pratique.
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  8. #8
    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 : 47
    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
    c'est pas tester, c'est juste l'idée, et il y a un _ final que j'avais pas envie de faire ce soir
    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
     
    <xsl:call-template name="typer">
    	<xsl:with-param name="liste" select="'menager_cuisine_carrelage_'"/>
    	<xsl:with-param name="final" select="''"/>
    	<xsl:with-param name="valeur" select="la valeur du noeud"/>
    </xsl:call-template>
     
    ..........	
     
     
     
     
     
    <xsl:template name="typer">
    	<xsl:param name="liste"/>
    	<xsl:param name="final"/>
    	<xsl:param name="valeur"/>
    	<xsl:choose>
    		<xsl:when test="$liste=''">
    			<xsl:value-of select="$final"/>
    		</xsl:when>
    		<xsl:when test="contains($valeur,substring-before($liste,'_'))">
    			<xsl:call-template name="typer">
    				<xsl:with-param name="liste" select="$liste"/>
    				<xsl:with-param name="final" select="concat($final,substring-before($liste,'_'),'_'"/>
    				<xsl:with-param name="valeur" select="$valeur"/>
    			</xsl:call-template>
    		</xsl:when>
    		<xsl:otherwise>
    			<xsl:value-of select="$final"/>
    		</xsl:otherwise>
    	</xsl:choose>
    </xsl:template>

  9. #9
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    merci erwy. je l'ai pas utilisé exactement comme ca, mais en jouant avec des call templates, des choose imbriqués et une recursivité, je suis arrivé à ce que je voulais faire.

    merci
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 23/06/2005, 10h56
  2. question de débutant sur les objets
    Par boucher_emilie dans le forum ASP
    Réponses: 3
    Dernier message: 06/08/2004, 10h51
  3. [MFC] Quelques questions de débutant...
    Par Sephi dans le forum MFC
    Réponses: 4
    Dernier message: 20/02/2004, 17h25
  4. Questions de débutant
    Par J-P-B dans le forum XMLRAD
    Réponses: 12
    Dernier message: 24/07/2003, 15h19
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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