Bonjour à tous,
Je suis à mon premier TP en web, et j'ai déjà du mal.
Je dois faire un fichier XML, sa feuille de style XSL et sa feuille de style CSS. Pourquoi les 2 on se le demande Smiley sweatdrop . J'ai vu un sujet similaire, mais honte Smiley confus Smiley confused sur moi j'ai rien compris,je suis perdue Smiley rolleyes

J'ai fais le fichier xml :

<?xml version="1.0" encoding="ISO-8859-1"?>
<CV xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="schema_xml.xsd">
  <Entete>
    <Etudiant Numero="10405353" 
 Formation="DESS CCI Réseaux">
      <Nom>XXXXXXX</Nom>
      <Prenom>XXXXXXXI</Prenom>
      <Adresse>XXXXXXX
        </Adresse>
      <Telephone>06</Telephone>
      <Email>XXXXXXX@hotmail.com</Email>
    </Etudiant>
    <Titre>Test CV</Titre>
  </Entete>
  <Rubrique Titre="Formation">
    <Item>
      <Date>02/09/08 - 31/06/09</Date>
      <Contenu>MASTER Professionnel Compétence
        complémentaire en informatique (Option Réseaux)</Contenu>
    </Item>
    <Item>
      <Date>02/09/06 - 31/06/08</Date>
      <Contenu>MASTER Recherche Ecologie, Ecologie
        Microbienne, Evolution (Lyon)</Contenu>
    </Item>
  </Rubrique>
  <Rubrique Titre="Experience">
    <Item>
      <Date>02/10/07 - 31/06/08</Date>
      <Contenu>Stage de recherche au sein de L'INSERM
        U851 Pathogénie des Staphyloccoques (Lyon)</Contenu>
    </Item>
    <Item>
      <Date>02/07/07 - 31/08/07</Date>
      <Contenu>Stage au sein de l'Institut Pasteur
        Unité de recherche et de référence sur la
        Tuberculose et les Mycobactéries (Guadeloupe)
        </Contenu>
    </Item>
    <Item>
      <Date>11/07/05 - 22/08/05</Date>
      <Contenu>Stage au sein du Laboratoire d'Analyse Biomédical
        Espiand-Girard Pointe-à-Pitre (Guadeloupe)
        </Contenu>
    </Item>
  </Rubrique>
  <Rubrique Titre="Competences">
    <Item>
      <SousTitre>Compétence en Informatique</SousTitre>
      <Contenu>XXXXXXX</Contenu>
    </Item>
    <Item>
      <SousTitre>Compétence en Biologie</SousTitre>
      <Contenu>XXXXXXX</Contenu>
    </Item>
    <Item>
      <SousTitre>Compétence personnelle</SousTitre>
      <Contenu>XXXXXXXXXXXXXX</Contenu>
    </Item>
  </Rubrique>
  <Rubrique Titre="Divers">
    <Item>
      <SousTitre>Langues</SousTitre>
      <Contenu>Français : Langue natale
        Anglais : Lu, parlé; et écrit
        Japonais : Niveau débutant</Contenu>
    </Item>
    <Item>
      <SousTitre>Séjours Linguistiques</SousTitre>
      <Contenu>Angleterre Canada Etats-Unis Japon Contenu>
    </Item>
  </Rubrique>
</CV>


A partir de là, c'est le flou artistique et comme vous le voyez l'informatique n'est pas mon premier domaine de prédilection..... Smiley cligne Smiley rolleyes

merci d'avance pour vos conseils
Modifié par Yuki_Hime (09 Jan 2009 - 23:28)
Bonsoir Yuki_Hime,

Je viens déplacer ton sujet dans la section xml où il me semble être plus à sa place Smiley cligne
Je ne suis pas un spécialiste du xml et ne te serai donc pas d'une grande aide sur ce coup là, désolé.
En attendant les probables réponses qui ne manqueront pas de t'être apportées, je peux néanmoins te recommander la lecture des cours que Gilles met fort gentiment à notre disposition, et que je trouve pour ma part très abordable :
http://www.gchagnon.fr/cours/xml/
( http://www.gchagnon.fr/cours/xml/stylexsl.html )

Bonne lecture,
Cdt,
Sylvain
Re

J'ai avancé grâce aux exemples du cours merci,....... mais là je bloque.
J'ai un rubrique (rubrique+) et je n'arrive pas a voir comment organiser mon code pour pouvoir travailler sur chacun des éléments.Voici la fin du schema xml (sinon voir au debut di sujet)

<>+ rubrique
......@ titre
......<>+ item
............<>? date
............<>? contenu
............<>? sous titre

La première rubrique doit contenir date et contenu
la seconde contenu et sous titre
.........
J'ai essayé la structure "for-each", mais je dois mal rédiger car cela ne sort pas du tout comme il faut.
Voici donc ce que j'ai fait jusqu'ici qui marche bien.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- DWXMLSource="CV.xml" -->
<!DOCTYPE xsl:stylesheet  [
	<!ENTITY nbsp   " ">
	<!ENTITY copy   "©">
	<!ENTITY reg    "®">
	<!ENTITY trade  "™">
	<!ENTITY mdash  "—">
	<!ENTITY ldquo  "“">
	<!ENTITY rdquo  "”"> 
	<!ENTITY pound  "£">
	<!ENTITY yen    "¥">
	<!ENTITY euro   "€">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <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 xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
    <title>Document sans titre</title>
    <link href="CV.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <h3 class="entete"><xsl:value-of select="CV/Entete/Titre" /><br />
      Formation : <xsl:value-of select="CV/Entete/Etudiant/@Formation" />   N° : <xsl:value-of select=   "CV/Entete/Etudiant/@Numero" /> </h3>
    <h1 class="nom"><xsl:value-of select="CV/Entete/Etudiant/Nom" /> <xsl:value-of select=   "CV/Entete/Etudiant/Prenom" /></h1>
    <br />
    <table width="369" height="73" border="2" class="tableau">
      <tr>
        <td><xsl:value-of select="CV/Entete/Etudiant/Adresse" /></td>
        <td><xsl:value-of select="CV/Entete/Etudiant/Telephone" /><br />
          <xsl:value-of select="CV/Entete/Etudiant/Email" /></td>
      </tr>
    </table>

    </body>
    </html>
  </xsl:template>
</xsl:stylesheet>


Modifié par Yuki_Hime (10 Jan 2009 - 20:34)
Bonsoir!

Il est difficile de te répondre comme ça, sans savoir exactement à quel fichier HTML tu souhaites aboutir.

Une erreur classique quand on utilise for-each est de ne pas tenir compte de l'élément courant. Par exemple, voici un bout de fichier XML:

<racine>
  <elt1>
    <elt2>bla</elt2>
  </elt1>
  <elt1>
    <elt2>ble</elt2>
  </elt1>
</racine>


Si on veut faire un boucle sur les éléments elt1 pour afficher la valeur de leur élément-enfant elt2, il faut écrire...


<xsl:for-each select="//elt1">
    <xsl:value-of select="elt2" />
</xsl:for-each>


Autrement dit, quand on est dans la boucle sur les elt1, toutes les références à d'autres éléments doivent être faites relativement à elt1 et plus à partir de l'élément racine.
sorry, en faite je dois faire mon cv (si c'est bien ce que tu demande)
Je pense être sur la bonne voie mais ça n'affiche pas les répétitions ....


 <br /><br />
    <span class="titre">Formation </span><br />
    <xsl:for-each select="CV/Entete/Titre">
    <ul>
      <xsl:value-of select="../../Rubrique/Item/Date" />&nbsp; 
      <xsl:value-of select="../../Rubrique/Item/Contenu" /></ul>
    </xsl:for-each>
    <br />
    <span class="titre">Expérience </span><br />
    <xsl:for-each select="CV/Entete/Titre">
    <ul>
      <xsl:value-of select="../../Rubrique/Item/Date" />&nbsp; 
      <xsl:value-of select="../../Rubrique/Item/Contenu" /></ul>
    </xsl:for-each>
    <br />
    
     <br />
     <span class="titre">Compétence </span><br />
    <xsl:for-each select="//Titre">
    <ul>
    <xsl:value-of select="//SousTitre" /><br />
    <xsl:value-of select="//Contenu" /></ul><br />
    </xsl:for-each>
     <br />
          <span class="titre">Divers </span><br />
    <xsl:for-each select="//Titre">
    <ul>
    <xsl:value-of select="//SousTitre" /><br />
    <xsl:value-of select="//Contenu" /></ul><br />
    </xsl:for-each>
     <br />


ça affiche ceci en html

Formation

02/09/08 - 31/06/09 MASTER Professionnel Compétence complémentaire en informatique (Option Réseaux)

Expérience

02/09/08 - 31/06/09 MASTER Professionnel Compétence complémentaire en informatique (Option Réseaux)


Compétence

Compétence en Informatique
MASTER Professionnel Compétence complémentaire en informatique (Option Réseaux)


Divers

Compétence en Informatique
MASTER Professionnel Compétence complémentaire en informatique (Option Réseaux)


les répétition ne se font pas et ce n'est pas le bon contenu snif...
je ne vois pas où est le blem
Modifié par Yuki_Hime (10 Jan 2009 - 21:32)
Procédons par ordre...

Je ne peux m'empêcher de te faire remarquer l'existence d'éléments HTML permettant de faire des titres sans passer par des span class="titre". Ces éléments sont libellés h1...h6 (h1 étant le plus important). Ils t'éviteraient de surcroît ces br disgrâcieux... De plus, une liste ul ne peut contenir que des éléments li.

Revenons au XSL.

Il ne sert à rien de faire une boucle sur CV/Entete/Titre, car il n'y a qu'un seul titre dans ton document XML. En revanche, il y a plusieurs rubriques... donc il te faut faire une boucle sur les rubriques. Ce n'est pas la manière la plus propre de le faire, mais on va éviter de toucher à ton document XML. Il te faut donc écrire un <xsl:for-each select="CV/Rubrique">. Il te suffit alors, pour écrire ton titre, d'y mettre la valeur de ton attribut Titre (avec un <xsl:value-of select="@Titre" />, dans un élément h2 par exemple). Ensuite, tu peux faire une boucle sur tes item:

<ul>
  <xsl:for-each select="Item"><li><xsl:value-of select="Date" />&nbsp;<xsl:value-of select="Contenu" /></li></xsl:for-each>
</ul>


Le principe est le même pour le reste du fichier...

Dans ton fichier XSL, si tu ne précises rien en écrivant <xsl:value-of select="../../Rubrique/Item/Date" />, c'est équivalent à ne prendre que le premier élément de tous les Date enfants de Item enfant de Rubrique etc. Comme tu ne faisais pas de boucle sur ces éléments, tu affichais toujours le premier...

PS: Ah oui, je m'étais promis de commenter ta petite phrase "un fichier XML, sa feuille de style XSL et sa feuille de style CSS. Pourquoi les 2 on se le demande" de ton premier message. La raison en est simple. XML est un format de stockage de données. XSL est un langage permettant de transformer ces données. Ici, le résultat de cette transformation est un fichier XHTML (je vais y revenir). Ensuite, on met en forme ce fichier XHTML avec une feuille de style CSS.

Je reviens maintenant sur cette histoire de XHTML. Tu utilises un élément xsl:output, ce qui montre une bonne volonté. Mais il y a un petit souci: pour que ton fichier XHTML soit valide, il doit être bien formé. Cela suppose que les éléments vides soient correctement fermés (comme tes br, par exemple). Pour cela, il faut indiquer XML comme format de sortie avec l'attribut method="xml". Mais dans ce cas, ton moteur de transformation ajoutera de lui-même un prologue XML (la première ligne <?xml version="etc>). Dans ce cas, Internet Explorer peut te causer quelques soucis d'affichage (passage en mode quirks pour les spécialistes). Du coup, il faut indiquer un format de sortie html (method="html") et donc renoncer à faire du XHTML... Cela dit, cette dernière remarque est juste pour ta culture générale; cela me démangeait trop de l'écrire et ce n'est pas indispensable pour résoudre ton problème Smiley lol

Modifié par Gilles (10 Jan 2009 - 22:30)
THX A LOT pour tous tes précieux conseils, et la culture G ça se nourrit chaque jour un peu plus, je me coucherais avec des infos en plus

J'ai un second problème pour finir
En relisant les fichiers je me suis rendu compte que j'avai oublié la photo
(oui je sais BAKAAAAA)

je dois donc ajouter la ligne de commande dans le schéma xlm.xsd
SCHEMA XML : <xs:element ref="Photo" minOccurs="0" />??????
(mais je ne pense pas que cela sois le bon code, le prof a fixé la dtd
DTD : <!ELEMENT Photo (#PCDATA)>


Comment fait ton donc pour insérer un photo dans mon fichier xml
XML : <Photo>photo.jpeg</Photo> ??????
j'ai pas trouvé la bonne rédaction avec "src="

pour que je puisse enfin l'ajouter dans le xsl ???
XSL : ?????
L'attribut ref de l'élément xsd:element dans ton schéma permet de... faire référence à une définition préalable de ton élément Photo.

Ici, si ton prof a mis dans la DTD un type PCDATA pour ton élément, alors l'équivalent est un simple <xsd:element name="Photo" minOccurs="0" />. Par défaut en effet, le type d'un élément est la chaîne de caractères, ce qui correspond au type dans la DTD.

Cela dit, tu ne pourras pas inclure une photo dans ton document XML, car ce dernier format (en l'état actuel des choses, en attendant le possible XML binarisé) n'est qu'un format de type texte. Tout au plus pourras-tu inclure à cet endroit l'URL de ton image, comme <Photo>images/monimage.png</Photo>.

Ensuite, dans ton XSL, il ne te restera qu'à créer un élément img en lui attribuant un attribut src valant le contenu de ton élément Photo (avec le couple xsl:element/xsl:attribute par exemple).

N'oublie pas l'attribut alt destiné à fournir une information équivalente à la photo aux utilisateurs ne pouvant pas consulter les images (par exemple les aveugles...). Dans ce cas particulier d'un CV, ta photo est finalement uniquement décorative (tout du moins dans un monde idéal où la couleur de peau par exemple ne devrait pas influencer la lecture du CV...), et donc tu peux indiquer un alt vide (alt="") dans ton élément img.
Modifié par Gilles (11 Jan 2009 - 10:15)