Traitement sous conditions

Traitement sous conditions - XML/XSL - Programmation

Marsh Posté le 11-07-2007 à 12:52:07    

Bonjour,
 
je cherche à traiter certaines données en fonction d'un attribut.
 
j'ai mon fichier xml :
<MESSAGE>
<CHAMP10 NOM="Dupont" PRENOM="toto"/>
  <CHAMP20 AGE="33"/>
</MESSAGE>
<MESSAGE>
<CHAMP10 NOM="Durand" PRENOM="tata"/>
  <CHAMP20 AGE="35"/>
</MESSAGE>
 
Je veux selectionner l'age uniquement de ceux dont le nom est Dupont.
J'ai essayé des tas de choses diffentes dont ca entres autres, je comprends que ca ne marche pas mais je bloque, je débute avec xsl.
 
<xsl:variable name="cond"/>
<xsl:template match="/">
 
<xsl:for-each select="MESSAGE">
 
<xsl:for-each select="CHAMP10">
<xsl:if test="@NOM= 'Dupont'">
<xsl:variable name="cond" select="@NOM"/>
</xsl:if>
 
</xsl:for-each>  
<xsl:for-each select="CHAMP20">
<xsl:if test="cond = 'Dupont'">
<xsl:value-of select="@AGE"/>&space;
</xsl:if>
</xsl:for-each>  
</xsl:for-each>  
 
 </xsl:template>
 
Merci.

Reply

Marsh Posté le 11-07-2007 à 12:52:07   

Reply

Marsh Posté le 13-07-2007 à 16:09:46    

JBMAN a écrit :

Bonjour,
 
je cherche à traiter certaines données en fonction d'un attribut.
 
j'ai mon fichier xml :
<MESSAGE>
<CHAMP10 NOM="Dupont" PRENOM="toto"/>
  <CHAMP20 AGE="33"/>
</MESSAGE>
<MESSAGE>
<CHAMP10 NOM="Durand" PRENOM="tata"/>
  <CHAMP20 AGE="35"/>
</MESSAGE>
 
Je veux selectionner l'age uniquement de ceux dont le nom est Dupont.
J'ai essayé des tas de choses diffentes dont ca entres autres, je comprends que ca ne marche pas mais je bloque, je débute avec xsl.
 
<xsl:variable name="cond"/>
<xsl:template match="/">
 
<xsl:for-each select="MESSAGE">
 
<xsl:for-each select="CHAMP10">
<xsl:if test="@NOM= 'Dupont'">
<xsl:variable name="cond" select="@NOM"/>
</xsl:if>
 
</xsl:for-each>  
<xsl:for-each select="CHAMP20">
<xsl:if test="cond = 'Dupont'">
<xsl:value-of select="@AGE"/>&space;
</xsl:if>
</xsl:for-each>  
</xsl:for-each>  
 
 </xsl:template>
 
Merci.


 
Pourquoi tant de haine? Ton example démontre que tu n'a RIEN compris au méchanisme de transformation...


Message édité par avander le 13-07-2007 à 16:13:06
Reply

Marsh Posté le 13-07-2007 à 16:23:39    

+1
<xsl:template match="/CHAMP10[@NOM='Dupont']">

Reply

Marsh Posté le 13-07-2007 à 16:28:38    

Il manque un élément racine à ton xml...  :whistle:  
 

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<ROOT>
<MESSAGE>
  <CHAMP10 NOM="Dupont" PRENOM="toto"/>
  <CHAMP20 AGE="33"/>
</MESSAGE>
<MESSAGE>
  <CHAMP10 NOM="Durand" PRENOM="tata"/>
  <CHAMP20 AGE="35"/>
</MESSAGE>
</ROOT>
<!-- eof -->


 
Ma transformation...

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
<!-- general settings -->
  <xsl:output method="text" omit-xml-declaration="no" encoding="ISO-8859-1"/>
 
<!-- transformations -->
  <xsl:template match="/">
    <xsl:text>Start XSLT
    </xsl:text>
    <xsl:apply-templates/>
  </xsl:template>
 
 
  <xsl:template match="MESSAGE">
    <xsl:text>Start MESSAGE</xsl:text>
    <xsl:apply-templates/>
  </xsl:template>
 
 
  <xsl:template match="CHAMP10">
    <xsl:text>Start CHAMP10
    </xsl:text>
    <xsl:text>Nom:</xsl:text><xsl:value-of select="@NOM" />
    <xsl:if test="@NOM='Dupont'">
      <xsl:text> Age:</xsl:text><xsl:value-of select="../CHAMP20/@AGE" />
    </xsl:if>
 
  </xsl:template>
</xsl:stylesheet>
<!-- eof -->


 
et le résultat:

Start XSLT
     
Start MESSAGE
  Start CHAMP10
    Nom:DupontAge:33
   
 
Start MESSAGE
  Start CHAMP10
    Nom:Durand


 
Les Start MACHIN c'est pour te donner une idée du processus...  

Reply

Marsh Posté le 03-09-2007 à 14:37:01    

Merci, très tardif, vacances obligent, pour cette réponse.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed