2010-07-30 9 views
0

J'essaie d'implémenter un fichier xsl dans un document XML. Cependant, quand je le fais, il ne montre rien. si je supprime la référence du xsl du fichier xml, les données au moins sont affichées.en utilisant xsl n'affiche rien

c'est le code xsl:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
<div> 
    <div style="background:red;"><xsl:value-of select="title"/></div> 
    <div style="background:green;"><p><xsl:value-of select="introduction"/></p></div> 
    <div style="background:blue;"><xsl:for-each select="verse"> 
      <div><xsl:value-of select="p"/></div> <br /> 
      <div><xsl:value-of select="trla"/></div> <br /> 
      <div><xsl:value-of select="trli"/></div> <br /> 
      </xsl:for-each> 
    </div> 
</div> 

</xsl:template> 
</xsl:stylesheet> 

xml:

<root> 
    <title></title> 
    <introduction></introduction> 
    <verse> 
     <p></p> 
     <trla></trla> 
     <trli></trli> 
    </verse> 
</root> 

et le code html où le xml est appelé par php:

<div id="display"> 
     <?php 
     error_reporting(E_ALL); 
     ini_set("display_errors", 1); 

      $xmldoc = new DOMDocument(); 
      if(!file_exists('test.xml')){ 
       echo "Sorry this file does not exists!"; 
       exit(); 
      } else { 
       $xmldoc->load('test.xml', LIBXML_NOBLANKS); 


      $activities = $xmldoc->firstChild->firstChild; 
      if($activities != null){ 
        while($activities != null){ 
            ?> 
        <div id="xml"> 
         <span> 
         <?php echo $activities->textContent ?> </li></ul></span> <br /> 

        </div> 
           <?php 
           $activities = $activities->nextSibling; 
        } 
       } 
      } 
     ?> 
    </div> 

Répondre

1

Tout d'abord, il Il n'y a pas de données dans les nœuds, donc je ne m'attendrais pas à ce que rien ne soit affiché quand value-of est appelé.

En outre, votre modèle correspond uniquement à l'élément racine, vous devez appeler explicitement l'élément portant le nom root, soit dans la déclaration de modèle, soit dans les différentes sélections. Remplacez la règle de correspondance par <xsl:template match="/root">.

Sinon, ce qui suit également le travail (à condition que vous avez des données dans les nœuds concernés):

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
<div> 
    <div style="background:red;"><xsl:value-of select="root/title"/></div> 
    <div style="background:green;"><p><xsl:value-of select="root/introduction"/></p></div> 
    <div style="background:blue;"><xsl:for-each select="root/verse"> 
      <div><xsl:value-of select="p"/></div> <br /> 
      <div><xsl:value-of select="trla"/></div> <br /> 
      <div><xsl:value-of select="trli"/></div> <br /> 
      </xsl:for-each> 
    </div> 
</div> 

</xsl:template> 
</xsl:stylesheet> 
+0

a répondu à votre suggestion. d'une façon ou d'une autre, cela ne fonctionnait pas même quand j'ai explicitement appelé l'élément avec le nom 'root'. les nœuds ne sont pas vides. – input

+0

@ fuz3d - J'ai testé votre XML (avec des données) et mon xsl ici: http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog – Oded

+0

merci, cela a fonctionné. J'ai dû manquer quelque chose. – input

1

C'est parce que l'intérieur du modèle le noeud contextuel est la racine du document. Modifiez le modèle correspondant à: match select="/*"

+0

l'a fait. n'a toujours pas fonctionné. – input

Questions connexes