我有一个简单的sitemap.xml文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>"home page link"/</loc>
<title>East Randolph Cabinet Shop</title>
<level>level-1</level>
</url>
.
.
.
</urlset>
然后我有我的sitemap.xsl文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<h2>Sitemap</h2>
<ul>
<xsl:for-each select="urlset/url">
<li class="<xsl:value-of select="level"/>"><a href="<xsl:value-of select="loc"/>"><xsl:value-of select="title"/></a></li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
然后我的sitemap.php文件中的代码应该使用xsl文件转换xml文件,然后回显结果:
<div id="content">
<?php
$xml = new DOMDocument;
$xml->load('sitemap.xml');
$xsl = new DOMDocument;
$xsl->load('sitemap.xsl');
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
echo $proc->transformToXML($xml);
?>
</div>
当我将浏览器定向到sitemap.php文件时,所有回显的信息都会显示在Sitemap标题<h2>Sitemap</h2>
之前。我对xsl很新,请原谅我的无知,但这对我来说,我的xsl for-each语句出了问题。我对么?我只是坚持这个。任何帮助将不胜感激。
答案 0 :(得分:1)
我可以看到您的XSL文件存在两个问题。
以下内容应该有效:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sm="http://www.sitemaps.org/schemas/sitemap/0.9">
<xsl:template match="/">
<h2>Sitemap</h2>
<ul>
<xsl:for-each select="sm:urlset/sm:url">
<li class="{sm:level}">
<a href="{sm:loc}"><xsl:value-of select="sm:title"/></a>
</li>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
请注意站点地图XML命名空间的sm
前缀和属性值模板。