我正在尝试使用此页面作为指南在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&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>
感谢您的帮助!
答案 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必须使用绑定到正确名称空间的显式前缀。