当我包含 xmlns=“http://www.sitemaps.org/schemas/sitemap/0.9”时,XSLT 不起作用
我的 Google 站点地图可以通过 XSLT 很好地呈现,而无需 << 中的 xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 。网址设置>元素,但是当包含时,我的 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>
My Google sitemap renders well through XSLT fine without the xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" in the < urlset > element, however when included, my foreach statement doesn't work and nothing renders in the template. My code's below. Thanks for your help.
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>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是常见问题解答。
XPath 将任何无前缀的名称视为属于“无命名空间”。但是,所提供文档中的元素属于
“http://www.sitemaps.org/schemas/sitemap/0.9”
命名空间 - 而不是“no namespace”
。因此,以下 XPath 表达式根本不选择任何节点:
解决方案:
定义
"http://www.sitemaps.org/schemas/sitemap/0.9"
XSLT 样式表中的命名空间并将前缀与其关联。然后将此前缀与参与任何 XPath 表达式的所有名称一起使用。当此转换应用于提供的 XML 文档时:
它正确地生成以下结果:
This is a FAQ.
XPath treats any unprefixed name as belonging to "no namespace". However, the elements in the provided document belong to the
"http://www.sitemaps.org/schemas/sitemap/0.9"
namespace -- not to"no namespace"
.Therefore, the following XPath expression doesn't select any node at all:
Solution:
Define the
"http://www.sitemaps.org/schemas/sitemap/0.9"
namespace in the XSLT stylesheet and associate a prefix to it. Then use this prefix with all names that participate in any XPath expression.when this transformation is applied on the provided XML document:
it correctly produces the following result:
xpath 需要命名空间作为前缀,例如,
如果它是 xmlns:x="http://www.sitemaps.org/schemas/sitemap/0.9" 你可以使用
它,看起来这个页面会有所帮助 http://msdn.microsoft.com/en-us/library/ms950779.aspx
编辑:我本来打算发布该内容并跟进一个如何使用 xsl 定义前缀的示例,但 Dimitre 已经这样做了。
the xpath will need the namespace as a prefix, eg
if it was xmlns:x="http://www.sitemaps.org/schemas/sitemap/0.9" you could use
it looks like this page will help http://msdn.microsoft.com/en-us/library/ms950779.aspx
EDIT: I was going to post that and follow up with an example of how to use xsl to define the prefix, but Dimitre already has.