Récupérer le contenu textuel d'un noeud

Récupérer le contenu textuel d'un noeud - XML/XSL - Programmation

Marsh Posté le 14-03-2006 à 16:55:30    

Bonjour, je cherche à récupérer avec XSLT le contenu d'un noeud de ce type pour l'intégrer comme résultat dans ma page en xhtml :
 

<item>retour< br/>a<br />la<br />ligne</item>


 
Le problème c'est que si j'utilise copy-of je me retrouve avec les "<item"> dans mon code xhtml et si j'utilise value-of je perd les balise de retour à la ligne... Y'a t'il un truc pour arriver à ce que je cherche à faire? Voici la source complete :
 
test.xml
 

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<doc>
 <item>ligne1<br />ligne2</item>
 <item>text</item>
 <item>retour<br />a<br />la<br />ligne</item>
</doc>


 
test.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
 <xsl:template match="/">
  <html>
   <body>
    <xsl:copy-of select="doc/item[3]" />
   </body>
  </html>
 </xsl:template>
</xsl:stylesheet>


 
Des idées? :D


Message édité par fils_de_la_lumiere le 14-03-2006 à 23:40:09
Reply

Marsh Posté le 14-03-2006 à 16:55:30   

Reply

Marsh Posté le 14-03-2006 à 23:40:42    

ça marche avec un :
 

<xsl:copy-of select="doc/item[1]/node()" />


 
mais j'obtiens en sortie ce genre de résultat et ce namespace vide fait que le navigateur ne considére pas '<br />' comme du xhtml :/ :
 

<html><body>ligne1<br xmlns="" />ligne2</body></html>


Message édité par fils_de_la_lumiere le 15-03-2006 à 02:15:39
Reply

Marsh Posté le 15-03-2006 à 15:01:30    

up

Reply

Marsh Posté le 15-03-2006 à 15:39:53    

C'est moche mais ca marche...peut etre une piste pour faire un truc plus generique!
 

Code :
  1. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  2. <xsl:template match="/">
  3.   <html>
  4.    <body>
  5.     <xsl:apply-templates select="doc/item"/>
  6.    </body>
  7.   </html>
  8. </xsl:template>
  9. <xsl:template match="item">
  10.    <xsl:value-of select="node()"/>
  11.    <xsl:apply-templates select="br"/>
  12. </xsl:template>
  13. <xsl:template match="br">
  14. <br/>
  15. <xsl:value-of select="string(following-sibling::node())"/>
  16. </xsl:template>
  17. </xsl:stylesheet>

Reply

Marsh Posté le 16-03-2006 à 06:11:43    

Merci mais je pense qu'il doit y'avoir de faire plus proprement avec les namespaces.
 
Le problème je pense est que la balise "<br>" n'est pas marqué comme du html car elle vient de l'exterieur (du document XML).
 
La seule solution pour l'instant est de définir pour chaque éléments '<br>' le namespace du xhtml. En clair c'est pas top du tout pour la creation coté serveur :d :  
 

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<doc>
 <item>ligne1<br />ligne2</item>
 <item>text</item>
 <item>retour<br xmlns="http://www.w3.org/1999/xhtml" />a<br xmlns="http://www.w3.org/1999/xhtml" />la<br xmlns="http://www.w3.org/1999/xhtml" />ligne</item>
</doc>


 
Il doit y'avoir moyen de définir générique pour tout les ces éléments un namespace à une valeur donnée...

Reply

Sujets relatifs:

Leave a Replay

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