XSL对包含RDF格式的RSS文件的解析

cer 2003-12-06 03:19:23
我的xsl文件的内容如下:
==========================================================================
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html40">
<xsl:output method="html"/>
<xsl:template match="/">
<HTML>
<HEAD>
<title>blog</title>
</HEAD>
<body>
<div align="center" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="2.3%">
<xsl:text disable-output-escaping="yes">&nbsp;&nbsp;&nbsp;&nbsp;</xsl:text>
</td>
<td width="95%">
<table cellpadding="0" cellspacing="0" width="100%">
<xsl:apply-templates/>
<!--xsl:apply-templates select="./*"/-->
<!--xsl:value-of select="."/-->
</table>
</td>
<td width="2.5%">
<xsl:text disable-output-escaping="yes">&nbsp;&nbsp;&nbsp;&nbsp;</xsl:text>
</td>
</tr>
</table>
</div>
</body>
</HTML>
</xsl:template>

<xsl:template match="item">
<tr>
<td height="10"/>
</tr>
<tr>
<td valign="middle" style="BORDER-TOP: darkgray 1px solid; FONT-WEIGHT: bold; FONT-SIZE: 20px; BORDER-BOTTOM: darkgray 1px solid; BACKGROUND-COLOR: #ffffcc">
<xsl:value-of select="./title"/>
</td>
</tr>
<tr>
<td height="10"/>
</tr>
<tr>
<td>
<!--xsl:variable name="ucase" select="'>'" />
<xsl:variable name="lcase" select="'>'" />
<xsl:variable name="content" select="./description" />
<xsl:value-of select="translate($content, '>', '>')"/-->
<xsl:value-of select="./description"/>
</td>
</tr>
<tr>
<td style="FONT-SIZE: 12px" align="right" height="25">
<xsl:value-of select="./pubDate"/> by
<A>
<xsl:attribute name="href"><xsl:value-of select="./link"/></xsl:attribute>
<xsl:value-of select="./creator"/>
</A>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>


==========================================================================

对:http://www.blogger.cn/MainFeed.aspx能正确的解析
但对含RDF的:http://www.dengjie.com/rss.asp的RSS不能很好的解析是为什么呢?
...全文
120 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cer 2003-12-07
  • 打赏
  • 举报
回复
谢谢 LeXRus(-7℃) 的回复,你给的xsl内容完全正确,我调试也通过了,但有点问题要问你:
1.<xsl:template match="/">是选择根目,但什么是根目录?是<?xml version="1.0" encoding="UTF-8"?>还是:<rdf:RDF xmlns:...... xmlns="http://purl.org/rss/1.0/">?

2.退过"/"到了根目录下,<xsl:apply-templates select="*/*"/>是选择任意结点的任意子结点,为什么我将第二个*改为"item"不行.

3.<xsl:value-of select="./*[name()='description']" disable-output-escaping="yes"/>
这一句是选择当前结点的description子结点,为什么我将他修改为:<xsl:value-of select="./description" disable-output-escaping="yes"/>不行?


静等您的回复
----------------------------------------张科峰上
Lex 2003-12-07
  • 打赏
  • 举报
回复
1. 根节点当然是rdf:RDF, 你可以用name()看一下
2. 问题二同问题三..把xmlns="http://purl.org/rss/1.0/"去掉就可以直接用./description
这个在msxml sdk 4参考里有一点说明:
An attribute xmlns="" undeclares the default namespace.
A namespace node has an expanded-name: the local part is the namespace prefix (this is empty if the namespace node is for the default namespace); the namespace Uniform Resource Identifier (URI) is always null.

The string-value of a namespace node is the namespace URI that is being bound to the namespace prefix; if it is relative, it must be resolved just like a namespace URI in an expanded-name.
Lex 2003-12-06
  • 打赏
  • 举报
回复
修改如下..
p.s.
xsl:value-of也有disable-output-escaping属性的, 不需要用translate来decode


<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/REC-html40">
<xsl:output method="html"/>
<xsl:template match="/">
<HTML>
<HEAD>
<title>blog</title>
</HEAD>
<body>
<div align="center" style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid">
<table cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="2.3%">
<xsl:text disable-output-escaping="yes">&nbsp;&nbsp;&nbsp;&nbsp;</xsl:text>
</td>
<td width="95%">
<table cellpadding="0" cellspacing="0" width="100%">
<xsl:apply-templates select="*/*"/>
<!--xsl:apply-templates select="./*"/-->
<!--xsl:value-of select="."/-->
</table>
</td>
<td width="2.5%">
<xsl:text disable-output-escaping="yes">&nbsp;&nbsp;&nbsp;&nbsp;</xsl:text>
</td>
</tr>
</table>
</div>
</body>
</HTML>
</xsl:template>

<xsl:template match="*/*">
<tr>
<td height="10"/>
</tr>
<tr>
<td valign="middle" style="BORDER-TOP: darkgray 1px solid; FONT-WEIGHT: bold; FONT-SIZE: 20px; BORDER-BOTTOM: darkgray 1px solid; BACKGROUND-COLOR: #ffffcc">
<xsl:value-of select="./*"/>
</td>
</tr>
<tr>
<td height="10"/>
</tr>
<tr>
<td>
<xsl:value-of select="./*[name()='description']" disable-output-escaping="yes"/>
</td>
</tr>
<tr>
<td style="FONT-SIZE: 12px" align="right" height="25">
<xsl:value-of select="./*[name()='dc:date']"/> by
<A>
<xsl:attribute name="href"><xsl:value-of select="./*[name()='link']"/></xsl:attribute>
<xsl:value-of select="./*[name()='dc:creator']"/>
</A>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
cer 2003-12-06
  • 打赏
  • 举报
回复
我发现:http://www.dengjie.com/rss.asp用XSL根本解析不了
如:我用下面这个最简单的都不行:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="//channel">
<xsl:value-of select="last()"/>
</xsl:template>
</xsl:stylesheet>


根本得不到什么
cer 2003-12-06
  • 打赏
  • 举报
回复
to:xpfd(东方晨雨)兄
这份资料我也有一份,但我写的xsl完全正确,但不知为什么就是不能解析:http://www.dengjie.com/rss.asp,因为这个是RSS1.0,而http://www.blogger.cn/MainFeed.aspx
则是RSS2.0
xpfd 2003-12-06
  • 打赏
  • 举报
回复
青苹果工作室编译,转自 ccidnet 网站
2001年03月16日

XSL(eXtensible Style sheet Language),即可扩展样式表语言,是XML的亲密伙伴。要学习好XML,不能不掌握XSL。本文就向你全面讲述XSL的一切一切:
客户端XSL:如何用XML解析器在客户机上将XML文档转换成HTML文档。

一个JavaScript的解决方法
在前文中,我们解释了如何用XSL将一个文档从XML转换成HTML。窍门就是向XML文件中增加一个XSL样式表,然后让浏览器来进行转换。即使这种方法能奏效,在XML文件中包含一个样式表引用也并非令人满意的方法,并且在不支持XSL的浏览器上这种方法还不能奏效。
一个更通用的方法应该是用一个JavaScript来进行从XML到HTML的转换。使用一个JavaScript,就更有以下可能性:

允许JavaScript进行浏览器细节测试;
根据浏览器和用户需求使用不同的样式表。
这就是XSL的美妙之处。XSL设计目的之一就是使数据从一个格式转换成另一个格式成为可能,从而支持不同的浏览器和不同的用户需求。
客户端XSL转换将成为未来浏览器工作任务的一个主要部分,我们还将看到专业化浏览器市场的成长,比如Braille、发声网络、网络打印机、手持PC、移动电话等。
XML文件和XSL文件
现在重新来看看前面章节中的XML文档:

<?xml version="1.0"?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
.
.
.
还有附带的XSL样式表:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="CATALOG/CD">
<tr>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="ARTIST"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

要确保XML文件没有对XSL文件的引用,XSL文件也没有对XML文件的引用。注意:上面的句子说明一个XML文件可以用许多不同的XSL文件进行转换。
在浏览器中将XML转换到HTML
以下是在客户机上将XML文件转换成HTML所需要的源代码,很简单:

<html>
<body>
<script language="javascript">
// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("cd_catalog.xml")
// Load the XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cd_catalog.xsl")
// Transform
document.write(xml.transformNode(xsl))
</script>
</body>
</html>

如果使用的是Internet Explorer 5.0 或更高版本,请点击这里查看结果。

代码的第一块创建了Microsoft XML 解析器(XMLDOM)的一个例示,并将XML文档加载到内存中。代码的第二块创建解析器的另一个例示,并将XSL文档加载到内存中。代码的最后一行用XSL文档转换XML文档,将结果写入HTML 文档中。

服务器端XSL:如何用XML解析器在服务器上将XML文档转换成HTML文档。

服务器端XSL
由于不是所有的浏览器都支持XML和XSL,因此就有了一个在服务器上将XML转换成HTML的方法。

一个跨浏览器的解决方法
在前面的章节中,我们解释了如何用XSL在浏览器中将XML文档转换成HTML,窍门就是让JavaScript使用一个XML解析器来进行转换。但是当浏览器不支持XML解析器时,这种方法是不奏效的。要使XML数据对所有浏览器都可用,我们就必须在服务器上转换XML文档,并将它作为纯HTML发送到浏览器。

这是XSL的另一个美妙之处。XSL的设计目的之一是使得在服务器上将数据从一种格式转换成另一种格式成为可能,并将可读数据返回到所有未来的浏览器中。

在服务器上进行XSL转换正在成为未来Internet信息服务器工作任务的一个主要部分,同时我们将看到专用浏览器市场的发展,如:Braille、有声网络、网络打印机、手持PC、移动电话等。

XML文件和XSL文件
现在来重新看看前面章节中的XML文档:

<?xml version="1.0"?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
.
.
.

如果使用的是Internet Explorer 5.0或更高版本,可以点击这里查看XML文件。
再看看伴随的XSL样式表:
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">
<html>
<body>
<table border="2" bgcolor="yellow">
<tr>
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="CATALOG/CD">
<tr>
<td><xsl:value-of select="TITLE"/></td>
<td><xsl:value-of select="ARTIST"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

如果使用的是Internet Explorer 5.0或更高版本,可以点击这里查看XSL文件。
以上XSL文档的语法在前面章节中已经解释过了,因此这里不再做解释。但是要确保XML文件没有对XSL文件的引用,XSL文件也没有对XML文件的引用。同时请注意:上面的句子表明一个服务器上的XML文件可以用许多不同的XSL文件进行转换。

在服务器端将XML转换成HTML
以下是在服务器上转换XML文件所需要的简单源代码:

<%
'Load the XML
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load(Server.MapPath("cd_catalog.xml"))
'Load the XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("cd_catalog.xsl"))
'Transform the file
Response.Write(xml.transformNode(xsl))
%>

代码的第一块创建Microsoft XML解析器(XMLDOM)的一个例示,并将XML文件装载到内存中。代码的第二块创建解析器的另一个例示,并将XSL文档装载到内存。代码的最后一行用XSL文档转换XML文档,并将结果返回浏览器。
xpfd 2003-12-06
  • 打赏
  • 举报
回复
俺不会 但是希望看到结果
re~~~~~~~~~~
可扩展标记语言 科技名词定义 中文名称: 可扩展标记语言 英文名称: extensible markup language;XML 定义: 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 应用学科: 地理学(一级学科);地理信息系统(二级学科) 以上内容由全国科学技术名词审定委员会审定公布 百科名片 可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。 目录 格式特性 简明语法 编辑本段格式特性   XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是展示数据。事实上XML与其他数据表现形式最大的不同是:他极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。   XML与HTML的设计区别是:XML是用来存储数据的,重在数据本身。而HTML是用来定义数据的,重在数据的显示模式。   XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows,Mac OS,Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。   为了使得SGML显得用户友好,XML重新定义了SGML的一些内部值和参数,去掉了大量的很少用到的功能,这些繁杂的功能使得SGML在设计网站时显得复杂化。XML保留了SGML的结构化功能,这样就使得网站设计者可以定义自己的文档类型,XML同时也推出一种新型文档类型,使得开发者也可以不必定义文档类型。 编辑本段简明语法   SGML常用来定义针对HTML的文档类型定义(DTD),同时它也常用于编写XML的DTD。SGML的问题就在于,它允许出现一些奇怪的语法,这让创建HTML的解析器成为一个大难题:   1 某些起始标签不允许出现结束标签,例如HTML中标签。包含了结束标签就会出现错误。   2 某些起始标签可以选择性出现结束标签或者隐含了结束标签   3 某些起始标签要求必须出现结束标签,例如HTML中[removed]标签。   4 标签可以以任何顺序嵌套。即使结束标签不按照起始标签的逆序出现也是允许的,例如,This is a sample string是正确的。   5 某些特性要求必须包含值,例如中的src特性。   6 某些特性不要求一定有值,例如中的nowrap特性。   7 定义特性的两边有没有加上双引号都是可以的,所以和都是允许的。   这些问题使建立一个SGML语言的解析器变成了一项艰巨的任务。判断何时应用以上规则的困难导致了SGML语言的定义一直停滞不前。以这些问题作为出发点,XML逐渐步入我们的视野。   XML去掉了之前令许多开发人员头疼的SGML的随意语法。在XML中,采用了如下的语法:   1 任何的起始标签都必须有一个结束标签。   2 可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如。XML解析器会将其翻译成。   3 标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,例如this is a samplestring。这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。   4 所有的特性都必须有值。   5 所有的特性都必须在值的周围加上双引号。   这些规则使得开发一个XML解析器要简便得多,而且也除去了解析SGML中花在判断何时何地应用那些奇怪语法规则上的工作。仅仅在XML出现后的前六年就衍生出多种不同的语言,包括MathML、SVG、RDFRSS、SOAP、XSLT、XSL-FO,而同时也将HTML改进为XHTML。 WEB技术 HTML HTML ▪ XHTML ▪ HTML 5 ▪ CSS ▪ TCP/IP XML XML ▪ XSLXSLT ▪ XSL-FO ▪ XPath ▪ XPointer ▪ XLink ▪ DTD ▪ XML Schema ▪ DOM ▪ XForms ▪ SOAP ▪ WSDL ▪ RDFRSS ▪ WAP ▪ Web Services Web脚本 JavaScript ▪ HTML DOM ▪ DHTML ▪ VBScript ▪ AJAX ▪ jQuery ▪ JSON ▪ E4X ▪ WMLScript Serv脚本 SQL ▪ ASP ▪ ADO ▪ PHP .NET Microsoft.NET ▪ ASP.NET ▪ .NET Mobile 多媒体 SMIL ▪ SVG 扩展阅读: 1 因为XML是W3C制定的,XML的标准化工作由W3C的XML工作组负责,该小组成员由来自各个地方和行业的专家组成,他们通过email交流对XML标准的意见,并提出自己的看法 (www.w3.org/TR/WD-xml)。因为XML 是个公共格式, (它不专属于任何一家公司),你不必担心XML技术会成为少数公司的盈利工具,XML不是一个依附于特定浏览器的语言。

8,909

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧