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] duplication de lecture


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut [XSLT] duplication de lecture
    Bonjour tout le monde,
    j'essaie de faire la duplication de lecture en Xslt.
    le code XML que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <Policy folder="/" name="R2">
    			<ResourceClassName>EmRe</ResourceClassName>
    			<PolicyType>policy</PolicyType>
    			<Disabled>False</Disabled>
    			<ExplicitDeny>True</ExplicitDeny>
    			<PreDeployment>False</PreDeployment>
    			<RegexCompare>False</RegexCompare>
    				<Resource>EmpRec</Resource>
    				<Action>Write</Action>
    				<Action>Read</Action>
    				<Identity>Carol</Identity>
    				<Identity>Eve</Identity>
    </Policy>
    et je veux le dupliquer de tel sorte qu il soit de cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <Policy folder="/" name="R2">
    			<ResourceClassName>EmRe</ResourceClassName>
    			<PolicyType>policy</PolicyType>
    			<Disabled>False</Disabled>
    			<ExplicitDeny>True</ExplicitDeny>
    			<PreDeployment>False</PreDeployment>
    			<RegexCompare>False</RegexCompare>
    				<Resource>EmpRec</Resource>
    				<Action>Write</Action>
     
    				<Identity>Carol</Identity>
     
    </Policy>
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <Policy folder="/" name="R2">
    			<ResourceClassName>EmRe</ResourceClassName>
    			<PolicyType>policy</PolicyType>
    			<Disabled>False</Disabled>
    			<ExplicitDeny>True</ExplicitDeny>
    			<PreDeployment>False</PreDeployment>
    			<RegexCompare>False</RegexCompare>
    				<Resource>EmpRec</Resource>
     
    				<Action>Read</Action>
     
    				<Identity>Eve</Identity>
    </Policy>
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Policy folder="/" name="R2">
    			<ResourceClassName>EmRe</ResourceClassName>
    			<PolicyType>policy</PolicyType>
    			<Disabled>False</Disabled>
    			<ExplicitDeny>True</ExplicitDeny>
    			<PreDeployment>False</PreDeployment>
    			<RegexCompare>False</RegexCompare>
    				<Resource>EmpRec</Resource>
    				<Action>Write</Action>
     
    				<Identity>Eve</Identity>
    </Policy>
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <Policy folder="/" name="R2">
    			<ResourceClassName>EmRe</ResourceClassName>
    			<PolicyType>policy</PolicyType>
    			<Disabled>False</Disabled>
    			<ExplicitDeny>True</ExplicitDeny>
    			<PreDeployment>False</PreDeployment>
    			<RegexCompare>False</RegexCompare>
    				<Resource>EmpRec</Resource>
     
    				<Action>Read</Action>
     
    				<Identity>Eve</Identity>
    </Policy>
    tout ca en utilisant Xslt, y a t-il quelqu un qui a une idée ????
    merci d'avance.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Je pense que le mieux est d'utiliser une xsl:key sur le couple "Action","Identity".
    http://www.jenitennison.com/xslt/keys.xml

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    merci pour ta réponse, ella m'a aidé pour résoudre un autre problème, mais concernant ma question ici, je ne pense pas que la fonction Key va résoudre la problématique, car cette fonction manipule ce qui est a l'intérieure des balises et moi je veux manipuler ce qui existe entre les balises.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Heu, "entre les balises", c'est à dire?

    Tu peux très bien sélectionner le texte contenu par les balises et en l'occurrence la concaténation du contenu des 2 balises.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    apparement j'ai pas bien posé la question, voici le shema correct de mon code xml.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <Policy folder="/" name="R2">
      <ResourceClassName>EmRe</ResourceClassName>
       <PolicyType>policy</PolicyType>
       <Disabled>False</Disabled>
       <ExplicitDeny>True</ExplicitDeny>
       <PreDeployment>False</PreDeployment>
       <RegexCompare>False</RegexCompare>
    <Resource>EmpRec</Resource>
           <Action>Write</Action>
           <Action>Read</Action>
           <Identity>Carol</Identity>
           <Identity>Eve</Identity>
    </Policy>
    et je veux le dupliquer de tel sorte qu il soit de cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Policy folder="/" name="R2">
        [INDENT]<ResourceClassName>EmRe</ResourceClassName>
        <PolicyType>policy</PolicyType>
        <Disabled>False</Disabled>
        <ExplicitDeny>True</ExplicitDeny>
        <PreDeployment>False</PreDeployment>
        <RegexCompare>False</RegexCompare><Resource>EmpRec</Resource>
              <Action>Write</Action>
     
              <Identity>Carol</Identity>
     
    </Policy>
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <Policy folder="/" name="R2">
             [INDENT]<ResourceClassName>EmRe</ResourceClassName>
             <PolicyType>policy</PolicyType>
             <Disabled>False</Disabled>
             <ExplicitDeny>True</ExplicitDeny>
             <PreDeployment>False</PreDeployment>
             <RegexCompare>False</RegexCompare>
    <Resource>EmpRec</Resource>
     
                     <Action>Read</Action>
     
                     <Identity>Eve</Identity>
    </Policy>
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <Policy folder="/" name="R2">
             [INDENT]<ResourceClassName>EmRe</ResourceClassName>
             <PolicyType>policy</PolicyType>
             <Disabled>False</Disabled>
             <ExplicitDeny>True</ExplicitDeny>
             <PreDeployment>False</PreDeployment>
             <RegexCompare>False</RegexCompare><Resource>EmpRec</Resource>
                    <Action>Write</Action>
     
                    <Identity>Eve</Identity>
    </Policy>
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <Policy folder="/" name="R2">
             <div style="margin-left:40px"><ResourceClassName>EmRe</ResourceClassName>
             <PolicyType>policy</PolicyType>
             <Disabled>False</Disabled>
             <ExplicitDeny>True</ExplicitDeny>
             <PreDeployment>False</PreDeployment>
             <RegexCompare>False</RegexCompare></div>                 <div style="margin-left:40px"><div style="margin-left:40px"><Resource>EmpRec</Resource>
     
                     <Action>Read</Action>
     
                     <Identity>Eve</Identity></div></div></Policy>
    je sais pas si la fonction Keys peut resoudre le probleme.
    si quelqu un a une idée, merci d'avance.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Bon, je crois que t'avais raison, j'ai pas réussi avec xsl:key .
    Pour me rattraper, j'ai pondu ça qui semble marcher :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    	<xsl:output method="xml" indent="yes"/>
    	<xsl:template match="/">
    		<res>
    			<xsl:apply-templates select="Policy"/>
    		</res>
    	</xsl:template>
     
    	<xsl:template match="Policy">
    		<xsl:call-template name="makePolicy">
    			<xsl:with-param name="indexIdentify" select="1"/>
    			<xsl:with-param name="indexAction" select="1"/>
    			<xsl:with-param name="nbIdentity" select="count(Identity)"/>
    			<xsl:with-param name="nbAction" select="count(Action)"/>
    		</xsl:call-template>
    	</xsl:template>
     
     
    	<xsl:template name="makePolicy">
    		<xsl:param name="indexAction"/>
    		<xsl:param name="indexIdentify"/>
    		<xsl:param name="nbIdentity"/>
    		<xsl:param name="nbAction"/>
     
    		<xsl:if test="number($indexIdentify) &lt;= number($nbIdentity) and number($indexAction) &lt;= number($nbAction)">
    			<xsl:element name="{local-name(.)}">
    				<xsl:copy-of select="*[local-name()!='Identity' and local-name()!='Action']"/>
    				<xsl:copy-of select="Identity[$indexIdentify]"/>
    				<xsl:copy-of select="Action[$indexAction]"/>
    			</xsl:element>
     
    			<xsl:if test="number($indexIdentify) &lt;= number($nbIdentity)">
    				<xsl:choose>
    					<xsl:when test="number($indexAction) &lt; number($nbAction)">
    						<xsl:call-template name="makePolicy">
    							<xsl:with-param name="indexAction" select="number($indexAction) + 1"/>
    							<xsl:with-param name="indexIdentify" select="$indexIdentify"/>
    							<xsl:with-param name="nbIdentity" select="$nbIdentity"/>
    							<xsl:with-param name="nbAction" select="$nbAction"/>
    						</xsl:call-template>
    					</xsl:when>
    					<xsl:otherwise>
    						<xsl:call-template name="makePolicy">
    							<xsl:with-param name="indexAction" select="1"/>
    							<xsl:with-param name="indexIdentify" select="number($indexIdentify) +1"/>
    							<xsl:with-param name="nbIdentity" select="$nbIdentity"/>
    							<xsl:with-param name="nbAction" select="$nbAction"/>
    						</xsl:call-template>
    					</xsl:otherwise>
    				</xsl:choose>
    			</xsl:if>
     
     
    		</xsl:if>
    	</xsl:template>
     
    </xsl:stylesheet>

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    salut,
    merci bcp pour ta reponse, je note que je suis pas trop familiarisé avec Xslt, alors si vous ajoutez des petits commentaires dans le code que tu as ecris ca va etre plus lisible.
    merci.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci pour ton aide, tu m as mis sur le bon chemin, j'ai resolu mon probleme finalement.

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Cool!
    Désolé pour le manque d'explication, j'ai eu la flemme mais en contre partie j'avais choisis des noms des variables assez parlant.

  10. #10
    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
    Quelque chose doit m'échaper ou vous vous êtes compliqués la vie
    Pour moi c'est un simple produit cartésien que deux boucles imbriqués règlent:

    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
    <xsl:template match="Policy">
    	<xsl:for-each select="Action">
    		<xsl:variable name="courant" select="current()"/>
    		<xsl:for-each select="../Identity">
    			<xsl:copy>
    				<xsl:copy-of select="../@*|../*[name()!='Action' and name()!='Identity']"/>
    				<Action>
    					<xsl:value-of select="$courant"/>
    				</Action>
    				<Identity>
    					<xsl:value-of select="."/>
    				</Identity>
    			</xsl:copy>
    		</xsl:for-each>
    	</xsl:for-each>
    </xsl:template>

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

Discussions similaires

  1. [XSLT]Eliminer les duplications
    Par reeda dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 02/01/2008, 14h43
  2. [XSLT]Problèmes d'ordre de lecture et d'écriture
    Par leup dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/07/2005, 10h36
  3. Pb Lecture de bitmap monochrome
    Par Loïc38 dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/07/2002, 18h24
  4. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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