xsl/xml la feuille de style n'affiche pas la valeur souhaité

xsl/xml la feuille de style n'affiche pas la valeur souhaité - XML/XSL - Programmation

Marsh Posté le 05-02-2007 à 10:32:54    

bonjour, j'ai donc un problème je veux faire un tableau en html a partire d'un fichier xml pour cela je fais une feuille de style xsl (je vais avoir beaucoup de mal a expliquer si vous voulez de plus ample informations dite le moi :sweat:  ) je n'arrive pas a afficher la valeur souhaité voici un extrait mon fichier xml :
 
- <Report>
- <Page>
  <Title>Rapport</Title>  
  <Icon>112</Icon>  
- <Item>
  <Title>Version</Title>  
  <Icon>112</Icon>  
  <Value>AIDA32 v3.94.2</Value>  
  </Item>
- <Item>
  <Title>Auteur</Title>  
  <Icon>112</Icon>  
  <Value>tamas.miklos@aida32.hu</Value>  
  </Item>
- <Item>
  <Title>Site web</Title>  
  <Icon>116</Icon>  
  <Value>http://www.aida32.hu</Value>  
  </Item>
- <Item>
  <Title>Type de rapport</Title>  
  <Icon>91</Icon>  
  <Value>Générateur de rapports</Value>  
  </Item>
- <Item>
  <Title>Ordinateur</Title>  
  <Icon>46</Icon>  
  <Value>EXPLOIT1</Value>  
 
je veux afficher la valeur en gras voici la ligne que j'ai mis (naïvement) dans ma feuille de style :
 
<td><xsl:value-of select="Report/Page/Item/Title"/></td>
 
mon problème est que c'est la valeur en italique qui s'affiche comment ciblé donc la valeur en gras?
 
merci d'avance


Message édité par injall2 le 05-02-2007 à 14:26:36
Reply

Marsh Posté le 05-02-2007 à 10:32:54   

Reply

Marsh Posté le 05-02-2007 à 15:44:41    

est-ce que mon problème est le même que arnobase? si oui que faut-il que je tape je ne trouve pas...

Reply

Marsh Posté le 06-02-2007 à 02:19:48    

Déjà, dans ton xpath tu demandes d'afficher la valeur d'une node "Title" et non "Value". Donc ça ne risque pas de marcher...
 
Sinon, naïvement je dirais :
 


<xsl:value-of select="Report/Page/Item[Title='Ordinateur']/Value"/>


 
PS : avec un code indenté, c'est mieux, parceque là c'est imbittable !

Reply

Marsh Posté le 06-02-2007 à 02:37:32    

D'abord tu ne peux pas faire appliquer value-of...,elle s'utile pour la valeur d'un attribut "
 
 
 
 <xsl:value-of select="Report/Page/Item/Title"/>  (A ne jamais écrire car expression Xpath avec un chemin rélatif)
 
 
<xsl:template match="/">
  <html><head><title> le titre du tableau</title></head>
A la place de ça tu dois écrire <td><i><xsl:apply-templates select="Report/Page/Item/Title"/></i></td>
</html></xsl:template>
 
Tu essaies ce code je me suis basé sur le chemin que t'as proposé en faisant fie du xml proposé.
 
 
 
 
 
 
 
 
 
 


---------------
amiss18
Reply

Marsh Posté le 06-02-2007 à 08:43:37    

merci Arjuna. Amiss18 je ne comprend la subtilité de ce que tu m'a proposé étant débutant je ne voit pas se que tu appelle un "attribut", merci de ta réponse chaque aide est très utiles

Reply

Marsh Posté le 06-02-2007 à 11:35:02    

Amiss18 te recommande d'écrire ta feuille XML proprement de façon modularisée à l'aide de templates.
Si je partage son avis, je le trouve un peu radical dans ses propos.
 
Mais il a raison, une fois que t'as réussi à faire un truc qui marchouille, change-le immédiatement en template afin de le rendre réutilisable.

Reply

Marsh Posté le 06-02-2007 à 11:39:48    

ah okay enfaite le XML c'est pas moi qui l'ai fait il a été généré automatiquement part aida32 donc je fait avec mais je saurais si je me met en faire un de mes propres mimines merci


---------------
quoi qu'il arrive va falloir que je m'excuse --- "ne faite pas d'affirmation inverse à la vérité"
Reply

Marsh Posté le 06-02-2007 à 14:49:04    

Déjà au niveau de ton fichier xml il y'a problème(ton document n'est ni valide, ni bien formé) car la balise <Page> et la dernière balise <Item> ne sont pas fermées.Le code que je t'ai passée c'est pas une solution définitive,je t'ai seulement signifié qu'il faut toujours matcher sur noeud avant d'appeler un templates:je m'explique
<xsl:template match="un noeud">
<!--toujours suisivie de:-->
<xsl:apply-templates select="un noeud"/>
ou <xsl:value-of select="valeur de l'attribut/>
Si tu ne comprends toujours pas tu me signales et je te file le bon chemin XPath qu'il te faut avec les commentaires.
Bon courage

Reply

Marsh Posté le 06-02-2007 à 15:07:14    

ce n'est que un extrait j'ai pris seulement se qui m'interressais a vous montré et comme je l'ai dis se fichier xml a été généré automatiquement par un logiciel (aida32) je ne peut donc pas le modifier, j'ai bien compris ton explication merci et merci de ton aide qui me permet de mieu comprendre se que je fais car j'apprend par les petit tutoriel sur le net il y a encore 2semaine je savais pas se qu'était le xml je te recontacterai pour des infos ;) merci encore


---------------
quoi qu'il arrive va falloir que je m'excuse --- "ne faite pas d'affirmation inverse à la vérité"
Reply

Marsh Posté le 06-02-2007 à 21:44:14    

amiss18 a écrit :

D'abord tu ne peux pas faire appliquer value-of...,elle s'utile pour la valeur d'un attribut "


:non:
Value-of peut être utilisée pour aller chercher la valeur de n'importe quel noeud, que ce soit du texte ou un attribut... La solution que tu donnes avec apply-template ne fonctionne que parce qu'il existe une builtin rule  

Code :
  1. <xsl:template match="text()|@*">
  2.     <xsl:value-of select="."/>
  3. </xsl:template>


Je recommanderais donc fortement de ne PAS utiliser le apply-template pour cet usage, à moins d'avoir un <template match=""> pour le noeud en question et de faire un <value-of select="text()" /> dedans. Et ceci afin d'éviter tout effet de bord en cas de redéfinition de la builtin rule.

Reply

Marsh Posté le 06-02-2007 à 21:44:14   

Reply

Marsh Posté le 07-02-2007 à 09:33:21    

enfète tout se complique je ne doit pas seulement faire aparraître que le nom d'un ordinateur mais tout un résumé de aida32... si je tape : <xsl:value-of select="Report/Page[Title='Résumé']/> est-ce que tout se qui suit derrière "group, item" et otre vont safficher?
 


Message édité par injall2 le 07-02-2007 à 09:54:49

---------------
quoi qu'il arrive va falloir que je m'excuse --- "ne faite pas d'affirmation inverse à la vérité"
Reply

Marsh Posté le 07-02-2007 à 14:21:32    

puis-je vous demander de me corriger, une erreure m'ai trouver mais je ne la trouve pas... :  
 
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns="http://www.w3.org/TR/xhtml1/strict">
<xsl:template match="/">  
<html>
<body>
<title>rapport pc</title>
<TABLE BORDER=4  rules=cols cellpadding=5 STYLE="background-color: #FFCC99" >
<COLGROUP>
   <COL SPAN="2" WIDTH="100" STYLE="background: #66FFFF">
</COLGROUP>
<COLGROUP>
   <COL SPAN="7" WIDTH=60 STYLE="background: #66FFFF">
</COLGROUP>
 
 
 
 
      <TR>
<TD colspan="2"  style="COLOR: blue">Résumé</TD>
<TD  style="COLOR: blue">Nom du système </TD>
<TD  style="COLOR: blue">Système d'exploitation</TD>
<TD  style="COLOR: blue">Partage </TD>
<TD  style="COLOR: blue">Disque logique</TD>
<TD  style="COLOR: blue">Réseau windows</TD>
<TD  style="COLOR: blue">Démarrage automatique</TD>
<TD  style="COLOR: blue">Tâches programmées</TD>
      </TR>
      <TR>
 
 
 
  <TD colSPAN="2" align=center style="COLOR: black"><xsl:value-of select="Report/Page[Title='Résumé']/Group"></td>
 
  <TD><xsl:value-of select="Report/Page[Title='Nom du système']/Device></TD>
  <TD><xsl:value-of select="Report/Page[Title='Système d'exploitation']/Group></TD>
  <TD>xsl:value-of select="Report/Page[Title='Partages']/Device></TD>
  <TD>xsl:value-of select="Report/Page[Title='Disques logiques']/Device></TD>
  <TD>xsl:value-of select="Report/Page[Title='Réseau Windows']/Device></TD>
  <TD>xsl:value-of select="Report/Page[Title='Démarrage automatique']/Device></TD>
  <TD>xsl:value-of select="Report/Page[Title='Tâches programmées']/Device></TD>
      </TR>
   
     
     
   
</TABLE>
 
 
 
 
 
 
 
 
</body>
</html>
</xsl:template>  
</xsl:stylesheet>


Message édité par injall2 le 07-02-2007 à 14:21:55

---------------
quoi qu'il arrive va falloir que je m'excuse --- "ne faite pas d'affirmation inverse à la vérité"
Reply

Marsh Posté le 09-02-2007 à 03:41:11    

Tu dois pouvoir cerner dans ton propre code qu'est ce qui ne marche comme ça sera plus facile de repondre aisement à la question.Autrement je te propose une solution parmi tant d'autres à toi de l'améliorer:
 
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
 <xsl:template match="/">
 <html>
  <head>
   <title></title>
  </head>
  <body>
 
  <table border="1" mode="liste">
  <tr>
   <td><b>Title</b></td>
   <td><b>Icon</b></td>
   <td>Value</td>
   </tr>
  <xsl:for-each select="/Report/Page/Item">
  <tr>
  <td><xsl:value-of select="Title"/></td><br/>
  <td><xsl:value-of select="Icon"/></td><br/>
  <td><xsl:value-of select="Value"/></td><br/>
  </tr>
  </xsl:for-each>
  </table>
  </body>
 </html>
 </xsl:template>
 
 
</xsl:stylesheet>

Reply

Marsh Posté le 09-02-2007 à 08:47:06    

merci amiss ke vai tenter sa mais j'ai énormément de mal a faire un code juste alors défois que des erreur vous sautes au visage ;).


---------------
quoi qu'il arrive va falloir que je m'excuse --- "ne faite pas d'affirmation inverse à la vérité"
Reply

Marsh Posté le 09-02-2007 à 18:45:07    

Il manque des guillemets sur plusieurs attributes de la table et des td. J'ai bon? :D
Attention ausi, ton namespace indique que c'est de l'xhtml strict mais en xhtml tout les noms d"éléments et des attributs sont en minuscules. Mais ça ne doit pas empêcher la transformation, c'est juste incorrect vis-à-vis du browser.


Message édité par rx__ le 09-02-2007 à 18:48:49
Reply

Marsh Posté le 12-02-2007 à 08:38:51    

et non rx je les ai toute rajoutés mais l'erreur persiste ":4: caracter not allowed"


---------------
quoi qu'il arrive va falloir que je m'excuse --- "ne faite pas d'affirmation inverse à la vérité"
Reply

Marsh Posté le 12-02-2007 à 18:22:12    

Erreur difficile à voir sur le forum... Tu as sans doute des voyelles accentuées dans ton fichier alors que tu n'as pas défini son encodage (qui est alors par défaut UTF-8). Tu dois donc mettre au début du fichier:

Code :
  1. <?xml version='1.0' encoding="ISO-8859-1"?>

Reply

Marsh Posté le 12-02-2007 à 23:25:05    

merci ;)


---------------
quoi qu'il arrive va falloir que je m'excuse --- "ne faite pas d'affirmation inverse à la vérité"
Reply

Sujets relatifs:

Leave a Replay

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