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] Eviter les Doublons


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [XSLT] Eviter les Doublons
    Bonjour à tous...

    Je suis tout nouveau en XSLT.
    Je dois transformer une structure XML en une nouvelle en utilisant une feuille XSLT.

    Le problème c'est que l'ancienne structure était assez mal faite ( à mon gout ) et avait beaucoup de redondance...
    La nouvelle structure de fichier est beaucoup mieux faites...

    Chaque éléments (avant redondant) sont aujourd'hui unique avec un id qui permet aux autres noeuds de pointer dessus.

    Je me suis ballader un petit moment sur le forum, et apparement ce qui me convient le plus serait de faire la méthode Muench.
    Le problème c'est que ne comprend pas tout ce qui est marqué dessus... est-ce quelqu'un pourrait me décrire le code vite fait pour que je puisse ensuite l'adapter à mon problème ?

    Voici le code que j'ai trouver sur le turorial de ce site.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
     
    <xsl:key name="id" match="Id" use="."/>  
     
    <xsl:template match="/"> 
     
        <xsl:for-each select="//Id[generate-id(.)=generate-id(key('id', .)[1])]"> 
          <xsl:value-of select='.'/> 
       </xsl:for-each> 
     
    </xsl:template> 
     
    </xsl:stylesheet>
    P.S. : merci aux bonnes âmes qui passeront par la...

  2. #2
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Pour le moment, ce que j'ai fait ne marche pas, ça ne me copie aucun noeuds...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	<xsl:key name="partyId" match="party" use="id" />
    	<xsl:template match="party" mode="party">
    		<xsl:for-each select="//partyId[generate-id(.) = generate-id(key('partyId', id)[1])]">
    		<party>
    			<xsl:attribute name="id">
    				<xsl:value-of select="@id"/>
    			</xsl:attribute>
    			<partyIdentifier>
    ...
    en sachant que l'élément que je veux tester se trouve dans party/id

    alors je confond surement un peu entre les éléments de key, et la variable avec laquelle je voudrait faire mon test de non redondance...

    quelqu'un une idée ?

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Je vous mets un peu plus de mon code XSLT pour une meilleure compréhension :

    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
    <?xml version='1.0' ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml"/>
    	<xsl:template match="/">
    		<loanPricingRequest>
    			<pricingDescription>
    				<xsl:apply-templates select="load/deals/deal/pricingProduct/productStructure/loan" mode="loan"/>
    				<xsl:apply-templates select="load/deals/deal/pricingProduct/collateral" mode="collateral"/>
    				<xsl:apply-templates select="load/deals/deal/pricingProduct/guarantee" mode="guarantee"/>
    				<xsl:apply-templates select="load/deals/deal/pricingProduct/party" mode="party"/>
    				<xsl:apply-templates select="load/deals/deal/pricingProduct/partyPricingInfo" mode="partyPricingInfo"/>
    			</pricingDescription>
    		</loanPricingRequest>
    	</xsl:template>
    [...]
    	<xsl:key name="partyId" match="party/@id" use="." />
    	<xsl:template match="party" mode="party">
    		<xsl:for-each select="//partyId[generate-id(.) = generate-id(key('partyId', id)[1])]">
    		<party>
    			<xsl:attribute name="id">
    				<xsl:value-of select="@id"/>
    			</xsl:attribute>
    			<partyIdentifier>
    				<tradePartyId>
    					<id>
    						<xsl:value-of select="partyIdentifier/tradePartyId/id"/>
    					</id>
    					<idScheme>
    						<xsl:value-of select="partyIdentifier/tradePartyId/idScheme"/>
    					</idScheme>
    				</tradePartyId>
    				<tradePartyCode>
    					<codingScheme>
    						<xsl:value-of select="partyIdentifier/tradePartyCode/codingScheme"/>
    					</codingScheme>
    					<code>
    						<xsl:value-of select="partyIdentifier/tradePartyCode/code"/>
    					</code>
    				</tradePartyCode>
    				<tradePartyType>
    					<xsl:value-of select="partyIdentifier/tradePartyType"/>
    				</tradePartyType>
    				<tradePartyMnemonic>
    					<xsl:value-of select="partyIdentifier/tradePartyMnemonic"/>
    				</tradePartyMnemonic>
    				<tradePartyShortName>
    					<xsl:value-of select="partyIdentifier/tradePartyShortName"/>
    				</tradePartyShortName>
    			</partyIdentifier>
    			<partyComment>
    				<commentSource>
    					<xsl:value-of select="partyComment/commentSource"/>
    				</commentSource>
    				<commentInfo>
    					<xsl:value-of select="partyComment/commentInfo"/>
    				</commentInfo>
    			</partyComment>
    		</party>
    		</xsl:for-each>
    	</xsl:template>
    voila, si vous avez besoin d'autre chose pour pouvoir m'aider, n'hésitez pas ;-)

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bon j'avance petit à petit tout seul en regardant les différents post sur Muechen...

    Et j'en conclu que mon truc devrait pllutôt ressembler a un truc comment ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:key name="partyId" match="party[@id]" use="." />
    	<xsl:template match="party" mode="party">
    		<xsl:for-each select="//id[generate-id(.) = generate-id(key('partyId', .)[1])]">
    		<party>
    			<xsl:attribute name="id">
    				<xsl:value-of select="@id"/>
    			</xsl:attribute>
    ...
    suis-je sur la bonne voie ?

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bon finalement, j'ai trouvé par moi même...

    il suffisait de mettre la method Muechen dans le apply-templates...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	<xsl:key name="partyId" match="party" use="@id" />
    	<xsl:template match="/">
    		<loanPricingRequest>
    			<pricingDescription>
    				<xsl:apply-templates select="load/deals/deal/pricingProduct/productStructure/loan" mode="loan"/>
    				<xsl:apply-templates select="load/deals/deal/pricingProduct/collateral" mode="collateral"/>
    				<xsl:apply-templates select="load/deals/deal/pricingProduct/guarantee" mode="guarantee"/>
    				<xsl:apply-templates select="load/deals/deal/pricingProduct/party[generate-id(.) = generate-id(key('partyId', @id)[1])]" mode="party"/>
    				<xsl:apply-templates select="load/deals/deal/pricingProduct/partyPricingInfo" mode="partyPricingInfo"/>
    			</pricingDescription>
    		</loanPricingRequest>
    	</xsl:template>
    ...

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

Discussions similaires

  1. [XSLT] eviter les doublons
    Par dadyFady dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 15/04/2010, 08h40
  2. [XSLT] eviter les doublons
    Par dadyFady dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 07/04/2010, 18h08
  3. [XSLT]Eviter les doublons
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 12/07/2006, 15h52
  4. [Débutant][XSLT]Eviter les doublons
    Par leminipouce dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 21/10/2005, 11h34
  5. [langage] 2 fichier dans 1 en evitant les doublons
    Par remixxl dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2004, 17h05

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