1

我有一个简单的 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="&lt;xsl:value-of select=&quot;level&quot;/&gt;"><a href="&lt;xsl:value-of select=&quot;loc&quot;/&gt;"><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 语句有问题。我对么?我只是坚持这一点。任何帮助,将不胜感激。

4

1 回答 1

1

我可以看到您的 XSL 文件存在两个问题。

  1. 您没有为站点地图文件使用正确的 XML 命名空间。
  2. 您不了解属性值模板。

像下面这样的东西应该可以工作:

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

请注意sm站点地图 XML 命名空间和属性值模板的前缀。

于 2013-04-13T16:23:47.197 回答