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 :

Filtrer les résultats d'un 'for-each'


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    MES
    Inscrit en
    Octobre 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : MES
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2021
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Filtrer les résultats d'un 'for-each'
    Bonjour à tous !

    J'ouvre une discussion dans l'espoir que quelqu'un puisse me guider dans la génération d'un fichier xslt.
    Je dois modifier un fichier xslt afin d'obtenir un résultat

    Voici mon fichier xml d'entrée :
    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
    <?xml version="1.0" encoding="utf-8"?>
    <OrderProgressStatus>
        <SessionContext>
            <PropertyBagV2>
                <Item Name="LabelWithContainer">
                    <ValueList>
                        <Value>401717371/L1709347</Value>
                        <Value>401717372/L1709349</Value>
                        <Value>401717373/L1709350</Value>
                    </ValueList>
                </Item>
                <Item Name="PIPackagingType">
                    <ValueList>
                        <Value>UC/L1709347</Value>
                        <Value>UC/L1709349</Value>
                        <Value>UM/L1709350</Value>
                    </ValueList>
                </Item>
                <Item Name="MainPackagingkMaterial">
                    <ValueList>
                        <Value>C13/L1709347</Value>
                        <Value>C14/L1709349</Value>
                        <Value>PALGEN/L1709350</Value>
                    </ValueList>
                </Item>
                <Item Name="PalletContainer">
                    <ValueList>
                        <Value>L1709350/PALGEN</Value>
                    </ValueList>
                </Item>
            </PropertyBagV2>
        </SessionContext>
        <PackingConfirmation>
            <OrderDetail>
                <PackingContainer>
                    <PackingMaterial>
                        <PackingProductNo>C13</PackingProductNo>
                        <PackingQuantity>1.0000000000</PackingQuantity>
                    </PackingMaterial>
                    <PackingMaterial>
                        <PackingProductNo>C40</PackingProductNo>
                        <PackingQuantity>1.0000000000</PackingQuantity>
                    </PackingMaterial>
                    <PackingMaterial>
                        <PackingProductNo>C9</PackingProductNo>
                        <PackingQuantity>4.0000000000</PackingQuantity>
                    </PackingMaterial>
                </PackingContainer>
                <PackingContainer>
                    <PackingMaterial>
                        <PackingProductNo>C13</PackingProductNo>
                        <PackingQuantity>1.0000000000</PackingQuantity>
                    </PackingMaterial>
                    <PackingMaterial>
                        <PackingProductNo>C40</PackingProductNo>
                        <PackingQuantity>1.0000000000</PackingQuantity>
                    </PackingMaterial>
                    <PackingMaterial>
                        <PackingProductNo>C9</PackingProductNo>
                        <PackingQuantity>4.0000000000</PackingQuantity>
                    </PackingMaterial>
                </PackingContainer>
            </OrderDetail>
        </PackingConfirmation>
    </OrderProgressStatus>
    Voici le fichier xml de sortie que je dois générer grâce au xslt :
    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
     
    <DELVRY03>
      <IDOC BEGIN="1">
          <E1EDL37 SEGMENT="1">
            <E1EDL44 SEGMENT="1">
              <VELIN>2</VELIN>
              <VEMNG>1</VEMNG>
              <MATNR>C40</MATNR>
            </E1EDL44>
            <E1EDL44 SEGMENT="1">
              <VELIN>2</VELIN>
              <VEMNG>3</VEMNG>
              <MATNR>C9</MATNR>
            </E1EDL44>
          </E1EDL37>
          <E1EDL37 SEGMENT="1">
            <E1EDL44 SEGMENT="1">
              <VELIN>2</VELIN>
              <VEMNG>1</VEMNG>
              <MATNR>C40</MATNR>
            </E1EDL44>
            <E1EDL44 SEGMENT="1">
              <VELIN>2</VELIN>
              <VEMNG>3</VEMNG>
              <MATNR>C9</MATNR>
            </E1EDL44>
          </E1EDL37>
      </IDOC>
      </DELVRY03>
    J'essaye depuis quelques jours de confronter les valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <ValueList>
                        <Value>C13/L1709347</Value>
                        <Value>C14/L1709349</Value>
                        <Value>PALGEN/L1709350</Value>
                    </ValueList>
    avec les valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <PackingMaterial>
                        <PackingProductNo>C13</PackingProductNo>
                        <PackingQuantity>1.0000000000</PackingQuantity>
                    </PackingMaterial>
                    <PackingMaterial>
                        <PackingProductNo>C40</PackingProductNo>
                        <PackingQuantity>1.0000000000</PackingQuantity>
                    </PackingMaterial>
                    <PackingMaterial>
                        <PackingProductNo>C9</PackingProductNo>
                        <PackingQuantity>4.0000000000</PackingQuantity>
    </PackingMaterial>
    pour que quand : subtring.before(<Value>C13/L1709347</Value>, '/') match avec <PackingProductNo>C13</PackingProductNo> ça ne créé pas de segment <E1EDL44 SEGMENT="1"> dans le fichier xml de sortie.

    Voici le fichier xslt sur lequel je travaille :
    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
     
    <xsl:for-each select="$var4_FlexNetBusinessRulesDeliveryPackingConfirmation/ns0:OrderDetail">
    	<xsl:variable name="var25_OrderDetail" select="."/>
    		<xsl:for-each select="$var25_OrderDetail/ns0:PackingContainer">
    		<xsl:variable name="var25_OrderDetail_PackingContainer_Container" select="."/>
    		<xsl:variable name="var36_result_LengthGreaterThanZero"> 
    		<xsl:call-template name="LengthGreaterThanZero">
    			<xsl:with-param name="Value" select="$var25_OrderDetail_PackingContainer_Container/ns0:Quantity"/>
    		</xsl:call-template>
    		</xsl:variable>								
    			<xsl:choose>
    				<xsl:when test="string((('0' != normalize-space($var36_result_LengthGreaterThanZero))  and ('false' != normalize-space($var36_result_LengthGreaterThanZero)))) != 'false'">
    					<E1EDL37>
    						<xsl:attribute name="SEGMENT">
    							<xsl:value-of select="'1'"/>
    						</xsl:attribute>
    								<xsl:for-each select="$var25_OrderDetail_PackingContainer_Container/ns0:PackingMaterial/ns0:PackingProductNo">
    								<xsl:variable name="get_PackingProductNo" select="."/> 
     
    									<E1EDL44><xsl:value-of select="$get_PackingProductNo"/></E1EDL44>
     
    									<xsl:for-each select="$var2_FlexNetBusinessFacadeCommonOrderProgressStatus/ns0:SessionContext/ns0:PropertyBagV2/ns0:Item/ns0:ValueList/ns0:Value">
     
    										<xsl:variable name="var_Value_MainPI" select="."/>  
    										<xsl:variable name="var_Value_MainPI_exists"> 
    				                                                <xsl:if test="string(boolean(../../@Name)) != 'false'">
    											<xsl:if test="string(('MainPackagingkMaterial' = string(../../@Name))) != 'false'">
    												<xsl:value-of select="'1'"/>
    											</xsl:if>
    										</xsl:if>
    									        </xsl:variable>
     
    										<xsl:if test="string(boolean(string($var_Value_MainPI_exists))) != 'false'">
     
    										<xsl:variable name="var_Select_PackingProductNo"> 
    										<xsl:if test="substring-before($var_Value_MainPI, '/') != $get_PackingProductNo">
    											<xsl:value-of select="'1'"/>
    										</xsl:if>
    										</xsl:variable>
     
    									</xsl:if>
     
    								</xsl:for-each>
     
    						</xsl:for-each>
    				</E1EDL37>
    				</xsl:when>
    				<xsl:otherwise>
    				</xsl:otherwise>
    		</xsl:choose>	
    	</xsl:for-each>
    </xsl:for-each>

    J'ai réalisé plusieurs tests, et la plupart du temps j'obtiens 3*3 : 9 résultats, ce qui est beaucoup plus que ce que je devrais obtenir (2)

    Merci d'avance de votre aide !

    Clara

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    je comprends pas trop qu'est-ce que tu cherches à comparer à quoi.

    Ton exemple est très compliqué et on comprend rien aux données.

    Quand tu ne trouves pas comment faire quelque chose en programmation, le premier réflexe doit être d'essayer de faire la même chose, mais sur des données simples.
    En général ça te permettra d'y arriver par toi-même, ce qui te permet de remettre la même solution sur le projet en prod.

    Et sinon, ça te permettra au moins de demander comment faire de manière claire et précise que n'importe qui comprend.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Filtrer les résultats d'une requête
    Par bilbot dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/02/2011, 16h41
  2. Réponses: 5
    Dernier message: 07/10/2008, 11h25
  3. Réponses: 7
    Dernier message: 08/07/2008, 19h41
  4. [Xslt] limiter les occurences d'un for-each
    Par AlphonseBrown dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 21/12/2005, 21h08
  5. Réponses: 1
    Dernier message: 13/04/2005, 14h41

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