使用xsl什么都不显示

时间:2010-07-30 14:38:48

标签: php xml xslt formatting domdocument

我正在尝试将xsl文件实现到xml doc。但是当我这样做时,它什么也没显示。如果我从xml文件中删除xsl的引用,则至少会显示数据。

这是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>

和通过php调用xml的html:

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

2 个答案:

答案 0 :(得分:1)

首先,任何节点都没有数据,因此我希望在调用value-of时不会显示任何内容。

此外,您的模板仅匹配根元素,您需要在模板声明中显式调用名称为root的元素,或者不同的选择。

将匹配规则更改为<xsl:template match="/root">

或者,以下内容也适用(如果您在相关节点中有数据):

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

答案 1 :(得分:1)

那是因为在模板内部,上下文节点是文档根。将模式匹配更改为:match select="/*"