我的Google站点地图通过XSLT很好地呈现,而没有<中的xmlns =“http://www.sitemaps.org/schemas/sitemap/0.9” urlset>元素,但是当包含时,我的foreach语句不起作用,模板中没有任何渲染。我的代码如下。谢谢你的帮助。
XML
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>{site_url}</loc>
<lastmod>{current_time format="%Y-%m-%d"}</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
</urlset>
XSL 的
<xsl:template match="/">
<html>
<body>
<h2>Sitemap</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Location</th>
<th>Last Modified</th>
<th>Update Frequency</th>
<th>Priority</th>
</tr>
<xsl:for-each select="urlset/url">
<tr>
<td><xsl:value-of select="loc"/></td>
<td><xsl:value-of select="lastmod"/></td>
<td><xsl:value-of select="changefreq"/></td>
<td><xsl:value-of select="priority"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
答案 0 :(得分:17)
我的Google站点地图渲染得很好 没有的XSLT很好
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
但是,在<urlset>
元素中 包括在内,我的foreach声明 不起作用,没有任何东西呈现 模板
这是常见问题解答。
XPath将任何未加前缀的名称视为属于“no namespace”。但是,提供的文档中的元素属于"http://www.sitemaps.org/schemas/sitemap/0.9"
命名空间 - 而不属于"no namespace"
。
因此,以下XPath表达式根本不会选择任何节点:
urlset/url
<强>解决方案强>:
在XSLT样式表中定义"http://www.sitemaps.org/schemas/sitemap/0.9"
命名空间并将前缀与其关联。然后将此前缀与参与任何XPath表达式的所有名称一起使用。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:s="http://www.sitemaps.org/schemas/sitemap/0.9"
exclude-result-prefixes="s"
>
<xsl:template match="/">
<html>
<body>
<h2>Sitemap</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Location</th>
<th>Last Modified</th>
<th>Update Frequency</th>
<th>Priority</th>
</tr>
<xsl:for-each select="s:urlset/s:url">
<tr>
<td><xsl:value-of select="s:loc"/></td>
<td><xsl:value-of select="s:lastmod"/></td>
<td><xsl:value-of select="s:changefreq"/></td>
<td><xsl:value-of select="s:priority"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
将此转换应用于提供的XML文档:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>{site_url}</loc>
<lastmod>{current_time format="%Y-%m-%d"}</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
</urlset>
它正确生成以下结果:
<html>
<body>
<h2>Sitemap</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Location</th>
<th>Last Modified</th>
<th>Update Frequency</th>
<th>Priority</th>
</tr>
<tr>
<td>{site_url}</td>
<td>{current_time format="%Y-%m-%d"}</td>
<td>monthly</td>
<td>0.5</td>
</tr>
</table>
</body>
</html>
答案 1 :(得分:3)
{http://www.sitemaps.org/schemas/sitemap/0.9}urlset
如果是xmlns:x =“http://www.sitemaps.org/schemas/sitemap/0.9”你可以使用
x:urlset
看起来此页面有助于http://msdn.microsoft.com/en-us/library/ms950779.aspx
编辑:我打算发布并跟进一个如何使用xsl来定义前缀的示例,但Dimitre已经有了。