我正在尝试将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>
答案 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="/*"