[XPATH] Chemin fonctionnel

Chemin fonctionnel [XPATH] - XML/XSL - Programmation

Marsh Posté le 14-12-2006 à 22:23:57    

Bonjour a tous, j'ai un projet à rendre pour demain et j'ai beau chercher dans mes cours, je trouve pas comment on fait .
 
Voila mon probleme.
 
J'ai par exemple ce XML

Citation :


<?xml version="1.0"?>  
<nouvelles>  
    <nouvelle>
  <id>1</id>
        <contenu>Monsieur et Madame RR</contenu>
        <date>10/10/2004</date>
    </nouvelle>
    <nouvelle>
  <id>2</id>
        <contenu>Monsieur et Madame TT</contenu>
        <date>10/10/2005</date>
    </nouvelle>
</nouvelles>


 
Voila les requetes que je connait :
 
Afficher tous les id :
/nouvelles/nouvelle/id
 
Affiche :  
1
2
 
 
 
Afficher tous les contenu:
/nouvelles/nouvelle/contenu
 
Affiche :  
Monsieur et Madame RR
Monsieur et Madame TT
 
 
 
Ma demande est la suivante :
Afficher le contenu qui a pour id 1:
??
 
Affiche:
Monsieur et Madame RR
 
PS: Avec id en attribut de nouvelle ca marche tres bien.
exemple :  

Citation :

   <nouvelle id="1">
          <contenu>Monsieur et Madame RR</contenu>
        <date>10/10/2004</date>
    </nouvelle>


Afficher le contenu qui a pour id 1:
/nouvelles/nouvelle [@id="1"]
 
Affiche:
Monsieur et Madame RR
 
Mais je ne peux pas mettre en attribut.
Obligation du client.
 
Si quelqu'un a la solution.
 
Merci de votre aide.


Message édité par omman95 le 14-12-2006 à 22:32:41
Reply

Marsh Posté le 14-12-2006 à 22:23:57   

Reply

Marsh Posté le 19-12-2006 à 10:48:05    

<?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"/>
 
<!-- parameters -->
 
<!-- global variables -->
 
<!-- transformations -->
 
  <xsl:template match="/">
    <xsl:apply-templates select="//nouvelle/contenu[ ../id = '1']" />
  </xsl:template>
 
 
  <xsl:template match="contenu">
    <xsl:text> Contenu: </xsl:text><xsl:value-of select="." />
    <xsl:text>
</xsl:text>
  </xsl:template>
 
</xsl:stylesheet>
<!-- eof -->


 
Ca te va?  :whistle:

Reply

Marsh Posté le 19-12-2006 à 14:56:54    

pourquoi ../id ? id tout court ça marche pas :??:
 
sinon, c'est pas un xpath que tu lui propose, mais un appel à un template à partir d'un chemin pas entier :p
 
/nouvelles/nouvelle[id=1]/contenu

Reply

Marsh Posté le 19-12-2006 à 15:55:32    

MagicBuzz a écrit :

pourquoi ../id ? id tout court ça marche pas :??:


 
Parce que je selectionne le contenu qui a un frèrot id à 1...
 

MagicBuzz a écrit :


sinon, c'est pas un xpath que tu lui propose, mais un appel à un template à partir d'un chemin pas entier :p
 
/nouvelles/nouvelle[id=1]/contenu


 
J'ai fait un petit stylesheet pour mettre au point mon xpath... reste à trier un peu, sinon ça serait pas amusant.

Reply

Marsh Posté le 19-12-2006 à 16:07:47    

je ne vois toujours pas pourquoi les .. :spamafote:

Reply

Marsh Posté le 19-12-2006 à 17:15:04    

<?xml version="1.0"?>  
<nouvelles>  
    <nouvelle>
        <id>1</id>
        <contenu>Monsieur et Madame RR</contenu>
        <date>10/10/2004</date>
    </nouvelle>
    <nouvelle>
        <id>2</id>
        <contenu>Monsieur et Madame TT</contenu>
        <date>10/10/2005</date>
    </nouvelle>
</nouvelles>


 

<xsl:apply-templates select="//nouvelle/contenu[ ../id = '1']" />


 
On fait la même chose... mais différemment... id est un frère de contenu pas un descendant.  
 

Reply

Marsh Posté le 19-12-2006 à 17:33:34    

faudra que je teste. à moins que msxml ne fasse pas pareil que le tiens, habituellement j'ai pas besoin de mettre les .. logiquement, dans les [] y'a pas de notions de profondeur (ce que je veux dire, c'est qu'après les [], on continue au niveau du noeud indiqué avant les crochets, pas de ce qu'il y a dans les crochets...)
 
arf, je viens de piger.
 
pkoi pas :
 


<xsl:apply-templates select="//nouvelle[id = '1']/contenu" />  


 
plus lisible non ?


Message édité par MagicBuzz le 19-12-2006 à 17:33:48
Reply

Sujets relatifs:

Leave a Replay

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