Bonjour,

je reposte un vieux problème dont voici les données d'entrées :
XML:

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
 
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="simple_view.xslt"?>
<REPORT>
     <RDSSTATUS>0</RDSSTATUS>
     <RDSMESSAGE>
     </RDSMESSAGE>
     <EXPRESSION type="multi">
          <MULTI>
               <INSTANCE name="Client" cast="String" key="true" trend="false">
                    <ITEM end='-1' start='-1'>hostname1</ITEM>
               </INSTANCE>
               <INSTANCE name="Status" cast="String" key="false" trend="false">
                    <ITEM end='1298489695' start='1298489695'>success</ITEM>
               </INSTANCE>
          </MULTI>
          <MULTI>
               <INSTANCE name="Client" cast="String" key="true" trend="false">
                    <ITEM end='-1' start='-1'>hostname1</ITEM>
               </INSTANCE>
               <INSTANCE name="Status" cast="String" key="false" trend="false">
                    <ITEM end='1298489754' start='1298489754'>success</ITEM>
               </INSTANCE>
          </MULTI>
          <MULTI name="LabCdc">
               <INSTANCE name="Client" cast="String" key="true" trend="false">
                    <ITEM end='-1' start='-1'>hostname1</ITEM>
               </INSTANCE>
               <INSTANCE name="Status" cast="String" key="false" trend="false">
                    <ITEM end='1298489695' start='1298489695'>success</ITEM>
               </INSTANCE>
          </MULTI>
          <MULTI name="LabCdc">
               <INSTANCE name="Client" cast="String" key="true" trend="false">
                    <ITEM end='-1' start='-1'>hostname1</ITEM>
               </INSTANCE>
               <INSTANCE name="Status" cast="String" key="false" trend="false">
                    <ITEM end='1298489695' start='1298489695'>success</ITEM>
               </INSTANCE>
          </MULTI>
          <MULTI name="LabCdc">
               <INSTANCE name="Client" cast="String" key="true" trend="false">
                    <ITEM end='-1' start='-1'>hostname2</ITEM>
               </INSTANCE>
               <INSTANCE name="Status" cast="String" key="false" trend="false">
                    <ITEM end='1298489695' start='1298489695'>success</ITEM>
               </INSTANCE>
          </MULTI>
          <MULTI name="LabCdc">
               <INSTANCE name="Client" cast="String" key="true" trend="false">
                    <ITEM end='-1' start='-1'>hostname2</ITEM>
               </INSTANCE>
               <INSTANCE name="Status" cast="String" key="false" trend="false">
                    <ITEM end='1298490092' start='1298490092'>success</ITEM>
               </INSTANCE>
          </MULTI>
          <MULTI name="LabCdc">
               <INSTANCE name="Client" cast="String" key="true" trend="false">
                    <ITEM end='-1' start='-1'>hostname2</ITEM>
               </INSTANCE>
               <INSTANCE name="Status" cast="String" key="false" trend="false">
                    <ITEM end='1298489695' start='1298489695'>failed</ITEM>
               </INSTANCE>
          </MULTI>
     </EXPRESSION>
</REPORT>
Pour l'instant j'utilise ce XSL :
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
 
<xsl:stylesheet id="stylesheet" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes"/> 
	<xsl:key name="client_status" match="/REPORT/EXPRESSION[1]/MULTI" use="concat(INSTANCE[@name='Client']/ITEM, '_', INSTANCE[@name='Status']/ITEM)"/>
	<xsl:template match="REPORT">
     <xsl:apply-templates select="/REPORT/EXPRESSION[1]"/>
	</xsl:template>
	<xsl:template match="/REPORT/EXPRESSION[1]">
		<xsl:for-each select="//MULTI[generate-id() = generate-id(key('client_status', concat(INSTANCE[@name='Client']/ITEM, '_', INSTANCE[@name='Status']/ITEM))[1])]">
			<xsl:sort select="INSTANCE[@name='Client']/ITEM"/>	
			<xsl:choose>	
			<xsl:when test="INSTANCE[@name='Status']/ITEM = 'failed'">		
<xsl:text>
failed</xsl:text>
				<xsl:value-of select="INSTANCE[@name='Client']/ITEM"/>
			</xsl:when>
				<xsl:otherwise>
					<xsl:text>
success</xsl:text>
					<xsl:value-of select="INSTANCE[@name='Client']/ITEM"/>
				</xsl:otherwise>
			</xsl:choose>
<xsl:text>
 
</xsl:text>
		</xsl:for-each>
	</xsl:template>
</xsl:stylesheet>
J'obtiens le résultat suivant :
successhostname1


successhostname2


failedhostname2
Ce que je cherche à faire c'est de me retrouver avec une ligne par hostname. Si le couple failed hostnameX est trouvé alors je n'affiche que celui la. Je ne veux afficher le "success" s'il existe au moins un failed pour ce hostname. Cet exemple se retrouve dans ma sortie ci-dessus.
je souhaite alors obtenir :
successhostname1


failedhostname2
La solution XSL que j'utilisais ne peux pas marcher car je filtre sur le couple hostname+status. Cependant apres plusieurs essais vains, je n'arrive pas à trouver une solution viable. Je pensais à de l'imbrication de for-each mais pas trouvé!

merci