gpt4 book ai didi

xml - 当我包含 xmlns ="http://www.sitemaps.org/schemas/sitemap/0.9"时,XSLT 不起作用

转载 作者:数据小太阳 更新时间:2023-10-29 01:40:57 26 4
gpt4 key购买 nike

我的 Google 站点地图在 < urlset > 元素中没有 xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"时可以很好地通过 XSLT 呈现,但是当包含时,我的 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

这是一个常见问题解答

XPath 将任何无前缀的名称视为属于“无命名空间”。但是,所提供文档中的元素属于 "http://www.sitemaps.org/schemas/sitemap/0.9"命名空间——不是 "no namespace" .

因此,下面的 XPath 表达式根本没有选择任何节点:

urlset/url

解决方案:

定义 "http://www.sitemaps.org/schemas/sitemap/0.9" XSLT 样式表中的命名空间并将前缀关联到它。然后将此前缀与参与任何 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>

关于xml - 当我包含 xmlns ="http://www.sitemaps.org/schemas/sitemap/0.9"时,XSLT 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3836121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com