использование xsl ничего не отображает - PullRequest
0 голосов
/ 30 июля 2010

Я пытаюсь внедрить файл xsl в документ xml. Однако, когда я делаю это, он ничего не отображает. если я удаляю ссылку на xsl из xml-файла, отображаются как минимум данные.

это код 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>

и HTML, где XML вызывается через 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>

Ответы [ 2 ]

1 голос
/ 30 июля 2010

Это потому, что внутри шаблона контекстный узел является корнем документа.Измените шаблон, соответствующий: match select="/*"

1 голос
/ 30 июля 2010

Во-первых, ни в одном из узлов нет данных, поэтому я не ожидал бы, что при их вызове будет 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>
...