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

我的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}&lt/loc>
<lastmod>{current_time format=“%Y-%m-%d”}&lt/lastmod>
<changefreq>每月&lt/changefreq>
<优先权>0.5&lt/优先权>
&lt/url>
&lt/urlset>

XSL

<xsl:template match=“/”>
<html>
<车身>
<h2>网站地图&lt/h2>
<表border=“1”>
<tr bgcolor=“#9acd32”>
<th>位置&lt/th>
<th>上次修改&lt/th>
<th>更新频率&lt/th>
<th>优先权&lt/th>
&lt/tr>
<xsl:for each select=“urlset/url”>
<tr>
<td&gt&书信电报;xsl:select=“loc”/&gt&lt/td>
<td&gt&书信电报;xsl:select=“lastmod”/&gt&lt/td>
<td&gt&书信电报;xsl:select=“changefreq”/&gt&lt/td>
<td&gt&书信电报;xsl:select=“priority”/&gt&lt/td>
&lt/tr>
&lt/xsl:for each>
&lt/表>
&lt/车身>
&lt/html>

我的谷歌网站地图呈现得很好
XSLT在没有
xmlns=”http://www.sitemaps.org/schemas/sitemap/0.9“
中<urlset&gt元素
当包含时,我的foreach声明
不起作用,没有任何渲染
模板

这是一个常见问题解答

XPath将任何不固定的名称视为属于“无命名空间”。但是,所提供文档中的元素属于”http://www.sitemaps.org/schemas/sitemap/0.9“名称空间--不适用于“无名称空间”

因此,以下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"
排除结果前缀=“s”
&燃气轮机;
<xsl:template match=“/”>
<html>
<车身>
<h2>网站地图&lt/h2>
<表border=“1”>
<tr bgcolor=“#9acd32”>
<th>位置&lt/th>
<th>上次修改&lt/th>
<th>更新频率&lt/th>
<th>优先权&lt/th>
&lt/tr>
<xsl:for each select=“s:urlset/s:url”>
<tr>
<td&gt&书信电报;xsl:select=“s:loc”/>的值&lt/td>
<td&gt&书信电报;xsl:select=“s:lastmod”/>的值&lt/td>
<td&gt&书信电报;xsl:select=“s:changefreq”/&gt&lt/td>
<td&gt&书信电报;xsl:select=“s:priority”/&gt&lt/td>
&lt/tr>
&lt/xsl:for each>
&lt/表>
&lt/车身>
&lt/html>
&lt/xsl:template>
&lt/xsl:stylesheet>

当此转换应用于提供的XML文档时

<urlset xmlns=”http://www.sitemaps.org/schemas/sitemap/0.9“>
<url>
<loc>{site_url}&lt/loc>
<lastmod>{current_time format=“%Y-%m-%d”}&lt/lastmod>
<changefreq>每月&lt/changefreq>
<优先权>0.5&lt/优先权>
&lt/url>
&lt/urlset>

它正确地产生以下结果

<html>
<车身>
<h2>网站地图&lt/h2>
<表border=“1”>
<tr bgcolor=“#9acd32”>
<th>位置&lt/th>
<th>上次修改&lt/th>
<th>更新频率&lt/th>
<th>优先权&lt/th>
&lt/tr>
<tr>
<td>{site_url}&lt/td>
<td>{current_time format=“%Y-%m-%d”}&lt/td>
<td>每月&lt/td>
<td>0.5&lt/td>
&lt/tr>
&lt/表>
&lt/车身>
&lt/html>

发表评论