开发者

using xsl displays nothing

i'm trying to implement an xsl file to an xml doc. however when i do so, it displays nothing. if i remove the reference of the xsl from the xml file, the data at least is displayed.

this is the xsl code:

<?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>

the xml:

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

and the html where the xml is being called through 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>


First off, there is no data in any of the nodes, so I would expect nothing to be displayed when value-of is called on them.

In addition, your template only matches the root element, you need to explicitly call the element with the name root, either in the template declaration, or the different selects.

Change the match rule to <xsl:template match="/root">.

Alternatively, the following will also work (provided you have data in the relevant nodes):

<?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>


That's because inside the template the context node is the document root. Change the pattern matching to: match select="/*"

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜