首次使用XSLT:页面显示为空白

时间:2014-03-17 21:15:57

标签: html xml xslt sitemap

我正在尝试使用此页面作为指南在XSLT上: http://www.w3schools.com/xml/xml_xsl.asp

我基本上尝试修改给定的XSL信息以适应我的标签,这些标签恰好是站点地图的形式。但是,当我将XSL样式应用于我的XML页面时,它显示为空白!很明显,我错过了/遗忘或没有看到什么。请帮忙。

我的XML(仅限代码段):

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="style.xsl" ?>
<!-- sitemap-generator-url="http://www.auditmypc.com/free-sitemap-generator.asp" -->
<!-- This sitemap was created using the free tool found here: http://www.auditmypc.com/free-sitemap-generator.asp -->
<!-- Audit My PC also offers free security tools to help keep you safe during internet travels -->
<urlset 
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
>
<url>
<loc>http://www.site.com/</loc>
<lastmod>2014-03-17T13:30:25-05:00</lastmod>
</url>
<url>
<loc>http://www.site.com/index.php?format=feed&#x26;type=rss</loc>
<lastmod>2014-03-17T13:28:20-05:00</lastmod>
</url>
</urlset>

我的XSL:

<?xml version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">

<xsl:for-each select="urlset/url">
<div style="background-color:teal;color:white;padding:4px">
<span style="font-weight:bold"><xsl:value-of select="loc"/></span>
</div>

<div style="margin-left:20px;margin-bottom:1em;font-size:10pt">
<span>Last Modified:<xsl:value-of select="lastmod"/></span>
</div>
</xsl:for-each>

</body>
</html>

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

示例XML文档中的urlset元素及其后代都在http://www.sitemaps.org/schemas/sitemap/0.9命名空间中,因此为了将它们与XPath表达式匹配,您必须将前缀绑定到该命名空间并始终使用它:

<?xml version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:sm="http://www.sitemaps.org/schemas/sitemap/0.9">
  <body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">

    <xsl:for-each select="sm:urlset/sm:url">
      <div style="background-color:teal;color:white;padding:4px">
        <span style="font-weight:bold"><xsl:value-of select="sm:loc"/></span>
      </div>

      <div style="margin-left:20px;margin-bottom:1em;font-size:10pt">
        <span>Last Modified:<xsl:value-of select="sm:lastmod"/></span>
      </div>
    </xsl:for-each>

  </body>
</html>

在XSLT / XPath 1.0中,未加前缀的元素名称​​总是表示没有名称空间中的元素,而前缀名称接受来自样式表的名称空间绑定,而不是来自输入XML。

顺便说一下,如果您正在编写XSLT以便在客户端通过浏览器进行解释,那么您将被限制为XSLT 1.0,因此我建议您找到一个很好的1.0特定教程和参考指南。 w3schools上的材料并不总是清楚它指的是什么版本的XSLT / XPath,如果你继续尝试不起作用的东西,你会感到沮丧,只是发现它们只是2.0的结构... < / p>

答案 1 :(得分:0)

请记住,XPath(以及XSLT)是名称空间感知的,但(至少在这些标准的1.0版本中)没有默认名称空间(xmlns =)赋值的概念。如果要选择命名空间节点,则XPath必须使用绑定到正确名称空间的显式前缀。