affichage xml avec xsl

affichage xml avec xsl - XML/XSL - Programmation

Marsh Posté le 08-07-2006 à 17:29:45    

bonjour...
suite à la création d'une petit base de données...  
un AUTEUR 'tbl_auteur' qui REALISE 'tbl_réalise' un DOCUMENT 'tbl_document'
j'exécute la requete et génère une page xml comme suit...
<?php
// édition du début du fichier XML
$xml = '<?xml version="1.0" encoding="iso-8859-1"?><rss version="2.0">';
$xml .= '<channel>';  
$xml .= '<title>Essai sur table auteur</title>';
$xml .= '<link>localhost</link>';
$xml .= '<description>Flux RSS des auteurs</description>';
$xml .= '<?xml-stylesheet type="text/xsl" href="flux_rss_rq1.xsl"?>';
 
// connexion a la base
@mysql_connect('localhost','root','') or die("Connexion impossible" );
@mysql_select_db('refdoc') or die("Echec de selection de la base" );
 
// selection
$res=@mysql_query("SELECT distinct
   a.id as ida,  
   a.idlibelle as idliba,
   a.nom as nom,  
   a.prenom as prenom,
   a.mail as email,  
   p.id as idp,  
   p.libelle_prof as libp
   FROM tbl_auteur a  
   left join tbl_prof p on p.id=a.idlibelle
   " );  
   
// extraction des informations et ajout au contenu
while($tab=@mysql_fetch_array($res))
{    
 $nom=$tab[nom];
 $prenom=$tab[prenom];
 $email=$tab[email];
 $libp=$tab[libp];
 $idauteur=$tab[ida];
 
 $xml .= '<item>';
 $xml .= '<auteur>';
 $xml .= '<nom>'.$nom.'</nom>';
 $xml .= '<prenom>'.$prenom.'</prenom>';  
 $xml .= '<email>'.$email.'</email>';
 $xml .= '<libp>'.$libp.'</libp>';
 $xml .= '</auteur>';
 
 $res2=@mysql_query("SELECT
   r.ida as idar,  
   r.idd as iddr,  
   b.id as idb,  
   b.titre as titre,  
   b.fichier_name as fich,  
   b.date_conf as datec,
   b.lieu_conf as lieuc
   FROM tbl_document b
   inner join tbl_realise r on b.id=r.idd
   where r.ida=".$idauteur."
   " );  
   while($tab2=@mysql_fetch_array($res2))
   {  
   $titre=$tab2[titre];
   $fich=$tab2[fich];
   $datec=$tab2[datec];
   $lieuc=$tab2[lieuc];
 
   $xml .= '<document>';
   $xml .= '<titre>'.$titre.'</titre>';
   $xml .= '<fich>'.$fich.'</fich>';
   $xml .= '<datec>'.$datec.'</datec>';
   $xml .= '<lieuc>'.$lieuc.'</lieuc>';
   $xml .= '</document>';
   }
 $xml .= '</item>';
   
}
 
// édition de la fin du fichier XML
$xml .= '</channel>';
$xml .= '</rss>';
 
// écriture dans le fichier
$fp = fopen("flux_rss_rq2.xml", 'w+');
fputs($fp, $xml);
fclose($fp);
@mysql_close();
 
?>
 
jusque là, tout va bien, j'obtiens la page xml suivante... :pt1cable:  
<?xml version="1.0" encoding="iso-8859-1"?><rss version="2.0"><channel><title>Essai sur table auteur</title><link>localhost</link><description>Flux RSS des auteurs</description><?xml-stylesheet type="text/xsl" href="flux_rss_rq1.xsl"?>
<item>
   <auteur>
     <nom>Smith</nom>
     <prenom>Daniel</prenom>
     <email>daniel.smith@army.us</email>
     <libp>M.</libp>
   </auteur>
   <document>
     <titre>Army US</titre>
     <fich>MES_REQUETES.doc</fich>
     <datec>1969</datec>
     <lieuc>Les Deux Tours</lieuc>
  </document>
</item>
<item>
...
</item>
 
</channel></rss>
là tout va bien... l'affichage est bon  :D  
 
par contre mon XSL ne marche pas... :??:  
HELP
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-1" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
 
<xsl:template match="/">
<html>
<head>
 
<title>Auteur</title>
</head>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
 <title>Traitement XSL d'un flux XML</title>
  </head>
   <body>
    <xsl:for-each select="/item">
     <xsl:for-each select="/item/auteur">
     <ul>
     <li>Auteur:
     <xsl:apply-templates select="/item/auteur/libp"/>
     <xsl:apply-templates select="/item/auteur/nom"/>
     <xsl:apply-templates select="/item/auteur/prenom"/>
     <xsl:apply-templates select="/item/auteur/email"/>
     </li>
     </ul>
     <xsl:text>  </xsl:text>
      <xsl:for-each select="/item/document">
      <ul>
      <li>Document:
       <xsl:apply-templates select="/item/document/titre"/>
       <xsl:apply-templates select="/item/document/fich"/>
       <xsl:apply-templates select="/item/document/datec"/>
       <xsl:apply-templates select="/item/document/lieuc"/>
      </li>
      </ul>
      <xsl:text>  </xsl:text>
      </xsl:for-each>
     </xsl:for-each>
    </xsl:for-each>
   </body>
  </html>
 </xsl:template>
</xsl:stylesheet>
 
Alors mon souci est que je dois l'afficher de manière à obtenir les auteurs et en dessous tous leurs documents...
la requete est bonne le XML aussi
mais j'arrive pas à utiliser le XSL
 
sous mozilla... il le met tout à la suite... mais c automatique
sous IE... il met que un XML sans aucun style.............
 
PLEASE HELP ME!!!!!!!!!!

Reply

Marsh Posté le 08-07-2006 à 17:29:45   

Reply

Marsh Posté le 08-07-2006 à 17:53:34    

Recoucou...
bon j'avance tout seul... comme quoi je fais des efforts...
j'ai viré le <rss version="2.0">...<:RSS> qui sert à rien dans mon cas...
mais comme tout roule toujours sur des roulettes... et bien la réponse de mon navigateur est la suivante...
 
 
La page XML ne peut pas être affichée  
Impossible d'afficher l'entrée XML en utilisant la feuille de style XSL. Corrigez l'erreur, puis cliquez sur le bouton Actualiser ou réessayez ultérieurement.  
 
 
--------------------------------------------------------------------------------
 
Balise de fin non attendue à cet emplacement. Erreur de traitement de la ressource http:// ici /flux_rss_rq2.xml. Ligne ...
 
<libp>M.</libp></auteur><document><titre>Intel</titre><fich>Art029AN.pdf</fich&...


Message édité par ty_zen le 08-07-2006 à 17:59:59
Reply

Marsh Posté le 08-07-2006 à 18:03:00    

Alors pour info, Mozilla affiche automatiquement ma solution sans prendre en compte mon xsl ... (qui doit être faux)
puisque IE me donne ceci...
 
La page XML ne peut pas être affichée  
Impossible d'afficher l'entrée XML en utilisant la feuille de style XSL. Corrigez l'erreur, puis cliquez sur le bouton Actualiser ou réessayez ultérieurement.  
--------------------------------------------------------------------------------
Balise de fin non attendue à cet emplacement. Erreur de traitement de la ressource http:// ici /flux_rss_rq2.xml. Ligne ...
<libp>M.</libp></auteur><document><titre>Intel</titre><fich>Art029AN.pdf</fich&...
 
Help me...

Reply

Marsh Posté le 09-07-2006 à 03:58:30    

Utilise la balise [ code] (le bouton C/C++ marche aussi, au dessus du texte) sinon c'est illisible
 
 
sinon

Code :
  1. <xsl:apply-templates select="/item/auteur/libp"/>


Il n'y a pas de templace libp...
 

Code :
  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <rss version="2.0"><channel><title>Essai sur table auteur</title><link>localhost</link>
  3. <description>Flux RSS des auteurs</description><?xml-stylesheet type="text/xsl" href="flux_rss_rq1.xsl"?>


eeeuuuuhh, tu es sûr de ton coup en mettant la feuille de style ici ? C'est pas avant tout ça, juste après la balise <?xml ?> ?


---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 09-07-2006 à 16:06:38    

effectivement, j'ai fait de nombreuses petites erreures...
je reprends après qlq nouveaux tests...
 
le xml

Code :
  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <?xml-stylesheet type="text/xsl" href="xslrq.xsl"?>
  3. <!DOCTYPE item1 SYSTEM "xml.dtd">
  4. <item1>
  5.     <item2>
  6.         <auteur>
  7.             <nom>Smith</nom>
  8.             <prenom>Daniel</prenom>
  9.             <email>daniel.smith@army.us</email>
  10.             <libp>M.</libp>
  11.         </auteur>
  12.         <document>
  13.             <titre>Army US</titre>
  14.             <lienf>MES_REQUETES.doc</lienf>
  15.             <datec>1969</datec>
  16.             <lieuc>Les Deux Tours</lieuc>
  17.         </document>
  18.     </item2>
  19.     <item2>
  20.         <auteur>
  21.             <nom>Surry</nom>
  22.             <prenom>Michel</prenom>
  23.             <email>surry.michou@hospital.dead</email>
  24.             <libp>Mme</libp>
  25.         </auteur>
  26.     </item2>
  27.     <item2>
  28.         <auteur><nom>Rabbit</nom>
  29.             <prenom>Roger</prenom>
  30.             <email>roger@lapinou.dream</email>
  31.             <libp>M.</libp>
  32.         </auteur>
  33.         <document>
  34.             <titre>Les Toons font leur spectacle - Tome2</titre>
  35.             <lienf>Art001AC.pdf</lienf>
  36.             <datec>2000</datec>
  37.             <lieuc>Sur terre, juste derrière, à droite</lieuc>
  38.         </document>
  39.         <document>
  40.             <titre>Poème maudit des Toons</titre>
  41.             <lienf>Art001AC.pdf</lienf>
  42.             <datec>2001</datec>
  43.             <lieuc>Paris la capital</lieuc>
  44.         </document>
  45.         <document>
  46.             <titre>Les Toons font leur spectacle - Tome1</titre>
  47.             <lienf></lienf>
  48.             <datec>1999</datec>
  49.             <lieuc>Sur terre, juste derrière, à gauche</lieuc>
  50.         </document>
  51.     </item2>
  52. </item1>


 
voici mon xsl

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <!--xsl:output method="html" encoding="iso-8859-1" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" /-->
  4.  <xsl:template match="/">
  5.   <html xmlns="http://www.w3.org/1999/xhtml">
  6.   <head>
  7.    <title>Auteur</title>
  8.    <!--meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"/-->
  9.   </head>
  10.    <body>
  11.     <xsl:for-each select="item1/item2">
  12.      <xsl:for-each select="item1/item2/auteur">
  13.       <ul>
  14.       <li>Auteur:
  15.        <xsl:value-of select="item1/item2/auteur/nom"/>
  16.        <xsl:value-of select="item1/item2/auteur/prenom"/>
  17.        <xsl:value-of select="item1/item2/auteur/email"/>
  18.        <xsl:value-of select="item1/item2/auteur/libp"/>
  19.       </li>
  20.       </ul>
  21.       <xsl:text>  </xsl:text>
  22.       <xsl:for-each select="item1/item2/document">
  23.        <ul>
  24.        <li>Document:
  25.         <xsl:value-of select="item1/item2/document/titre"/>
  26.         <xsl:value-of select="item1/item2/document/lienf"/>
  27.         <xsl:value-of select="item1/item2/document/datec"/>
  28.         <xsl:value-of select="item1/item2/document/lieuc"/>
  29.        </li>
  30.        </ul>
  31.        <xsl:text>  </xsl:text>
  32.        </xsl:for-each>
  33.       </xsl:for-each>
  34.     </xsl:for-each>
  35.    </body>
  36.   </html>
  37.  </xsl:template>
  38. </xsl:stylesheet>


 
et la dtd externe est la suivante xml.dtd

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!ELEMENT item1 (item2*)>
  3. <!ELEMENT item2 (auteur,document*)>
  4. <!ELEMENT auteur (nom,prenom,email,libp)>
  5. <!ELEMENT nom (#PCDATA)>
  6. <!ELEMENT prenom (#PCDATA)>
  7. <!ELEMENT email (#PCDATA)>
  8. <!ELEMENT libp (#PCDATA)>
  9. <!ELEMENT document (titre,lienf,datec,lieuc)>
  10. <!ELEMENT titre (#PCDATA)>
  11. <!ELEMENT lienf (#PCDATA)>
  12. <!ELEMENT datec (#PCDATA)>
  13. <!ELEMENT lieuc (#PCDATA)>


 
c cool, tout est valide... mais rien ne s'affiche!!!!!!!!!!!!!!
vérif sous Oxygen... document valide... association aux schéma xml.dtd OK
 
mais bon, rien de visible sous mozilla!!!


Message édité par ty_zen le 09-07-2006 à 16:28:34
Reply

Marsh Posté le 09-07-2006 à 16:30:56    

Tu renvoies quoi exactement au navigateur car je vois pas de:

Code :
  1. header( "Content-type: text/xml" );


Tu travailles en local ? sur un serveur ?

Reply

Marsh Posté le 09-07-2006 à 16:57:08    

en local...
mais là je t'avoue que je suis perdu...
le:

Code :
  1. header( "Content-type: text/xml" );


tu le place dans quel fichier... le xsl,non?


Message édité par ty_zen le 09-07-2006 à 17:00:20
Reply

Marsh Posté le 09-07-2006 à 17:33:10    

Zut j'ai pas fait gaffe sur comment tu gérais ton truc:
si j'ai bien compris coté serveur tu crées un ".xml" en retirant des infos d'une base de données et tu ecris ce dernier en dur.
Puis avec ton navigateur tu tentes d'ouvrir directement cet xml. ?
 
Si c'est le cas ce que j'ai dis avant ne sert à rien.
Par contre j'ai fait un petit test avec le xml et le xsl (mais en virant la dtd) que tu as donné 2 messages au dessus et chez moi et ton xsl est bien appliqué mais il ne génere ceci:

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <html xmlns="http://www.w3.org/1999/xhtml"><head><title>Auteur</title></head><body/></html>


C'est à dire rien à afficher. Mais le titre de la page doit changer, si c'est aussi le cas chez toi alors c'est ton xsl qui est bancal .

Reply

Marsh Posté le 09-07-2006 à 17:33:15    


[cpp]
 
     <xsl:for-each select="item1/item2">
      <xsl:for-each select="item1/item2/auteur">
       <ul>
       <li>Auteur:
        <xsl:value-of select="item1/item2/auteur/nom"/>
        <xsl:value-of select="item1/item2/auteur/prenom"/>
        <xsl:value-of select="item1/item2/auteur/email"/>
        <xsl:value-of select="item1/item2/auteur/libp"/>
       </li>
       </ul>
      [/code]
Spa bon ça, si je me trompe pas dans le foreach tu es dans ton element, cad que tu es dans item2, donc le foreach dans item2 ça devrait être

Code :
  1. <xsl:for-each select="auteur">


idem pour les value-of


---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 09-07-2006 à 17:51:45    

après quelque petit modifs j'ai déjà des résultats plus probants:

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <!--xsl:output method="html" encoding="iso-8859-1" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" /-->
  4. <xsl:template match="/">
  5.  <html xmlns="http://www.w3.org/1999/xhtml">
  6.   <head>
  7.    <title>Auteur</title>
  8.    <!--meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"/-->
  9.   </head>
  10.   <body>
  11.    <xsl:for-each select="item1/item2">
  12.     <!-- <xsl:for-each select="item1/item2/auteur"> -->
  13.     <xsl:for-each select="auteur">
  14.      <ul>
  15.       <li>Auteur: <xsl:value-of select="nom"/> 
  16.         <xsl:value-of select="prenom"/>
  17.        <xsl:value-of select="email"/>
  18.        <xsl:value-of select="libp"/>
  19.       </li>
  20.      </ul>
  21.      <!-- <xsl:text>  </xsl:text> -->
  22.      <xsl:for-each select="../document">
  23.       <ul>
  24.        <li>Document: <xsl:value-of select="titre"/>
  25.         <xsl:value-of select="lienf"/>
  26.         <xsl:value-of select="datec"/>
  27.         <xsl:value-of select="lieuc"/>
  28.        </li>
  29.       </ul>
  30.       <!-- <xsl:text>  </xsl:text> -->
  31.      </xsl:for-each>
  32.     </xsl:for-each>
  33.    </xsl:for-each>
  34.   </body>
  35.  </html>
  36. </xsl:template>
  37. </xsl:stylesheet>

Reply

Marsh Posté le 09-07-2006 à 17:51:45   

Reply

Marsh Posté le 09-07-2006 à 18:02:00    

effectivement je génére mon xml avec une page php...
 
par contre, mon collègue me disai que la dtd n'est pas à prendre en compte mais le xsd... (gros souci, je n'arrive pas avec Oxygen à trouver comment le faire)
 
sinon, pour le foreach, merci de l'info, je pouvai toujours courir avec ma solution :)  
 
Question à la con ( encore une )  
 
donc si j'ai mon xml, et mon xsl (modifier comme précédement) je dois pouvoir avoir un petit résultat avec Oxygen...
hélas, j'ai un failed..
en fait le xsl semble mal formé... >Tropicano 's xsl... en fait il donne
"
SystemID: C:\Program Files\EasyPHP\www_refdocs\xslrq.xsl
Description: Failed to parse stylesheet
 
SystemID: C:\Program Files\EasyPHP\www_refdocs\xslrq.xsl
Endroit: 1:0
Description: The processing instruction target matching "[xX][mM][lL]" is not allowed.
"

 
c chelou...non?


Message édité par ty_zen le 09-07-2006 à 18:11:09
Reply

Marsh Posté le 09-07-2006 à 18:12:45    

tropicano a écrit :

Zut j'ai pas fait gaffe sur comment tu gérais ton truc:
si j'ai bien compris coté serveur tu crées un ".xml" en retirant des infos d'une base de données et tu ecris ce dernier en dur.
Puis avec ton navigateur tu tentes d'ouvrir directement cet xml. ?
 
Si c'est le cas ce que j'ai dis avant ne sert à rien.
Par contre j'ai fait un petit test avec le xml et le xsl (mais en virant la dtd) que tu as donné 2 messages au dessus et chez moi et ton xsl est bien appliqué mais il ne génere ceci:

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <html xmlns="http://www.w3.org/1999/xhtml"><head><title>Auteur</title></head><body/></html>


C'est à dire rien à afficher. Mais le titre de la page doit changer, si c'est aussi le cas chez toi alors c'est ton xsl qui est bancal .


 
de ce côté là je suis d'accord... j'ai eu aussi ce message...

Reply

Marsh Posté le 09-07-2006 à 18:37:41    

rectification!!!!!!!!!!!
 
ça fonctionne...
c'était un souci d'espace!!!
merci beacoup tropicano

Reply

Sujets relatifs:

Leave a Replay

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