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不能很好的解析是为什么呢?
...全文
211 7 打赏 收藏 举报
写回复
用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~~~~~~~~~~
源码下载地址: https://pan.quark.cn/s/07e7935aff27 在Android应用开发过程中,`ImageView`作为一个基础组件被广泛运用,其主要功能是展示各种图像资源,这些资源可以来源于本地存储或通过网络获取。本文将详细阐述如何动态地变更`ImageView`所显示的图片内容,并借助自定义监听机制来监控和干预图片的加载流程。此类技术在应用开发中具有很高的实用价值,特别是在处理网络用户头像、商品展示图以及实时数据更新的场景下。 我们首先需要明确`ImageView`的基本操作方式。在Android平台,我们常通过`setImageResource()`、`setImageBitmap()`以及`setImageDrawable()`等函数来设定`ImageView`的图像内容。然而,这些方法主要适用于已加载至内存中的图像文件,对于网络图片,则需要借助更为复杂的处理逻辑。 在实现动态下载并更新`ImageView`中的图像时,我们普遍采用`AsyncTask`或`Loader`来执行后台任务,以此防止主线程被阻塞。本文将重点介绍自定义监听器的构建方法。自定义监听器能够让我们依据图片加载的进程或状态来执行特定的任务,例如显示加载进度指示器或处理加载失败的情况。 自定义监听器通常定义为一个接口,其中包含了若干个回调方法,例如`onStart()`、`onProgressUpdate()`、`onSuccess()`、`onError()`等。以下是一个示例接口定义: ```java public interface ImageDownloaderListener { void onStart(); void onProgress(int ...
代码转载自:https://pan.quark.cn/s/8e8053c4e35c uni-app是由DCloud(即海豚浏览器背后的公司)设计的一款基于Vue.js技术的跨平台前端框架。其核心思想是让开发者仅需编写一次代码,就能达成多平台的兼容性,涵盖了iOS、Android、H5、小程序以及快应用等多个不同的终端设备。这种“编写一次,随处运行”的特性显著提升了开发效能,减少了维护开销,特别适用于构建规模庞大且结构复杂的应用程序。 【Vue.js基础】 uni-app的开发根基是Vue.js,这是一款具备轻量级MVVM(Model-View-ViewModel)架构的前端框架。Vue.js借助声明式的数据结合以及组件化机制,简化了前端构建过程。在uni-app环境中,Vue的模板语法、计算属性、指令、组件等要素均被保留并应用于开发跨平台应用。开发者需要充分掌握Vue的基础概念和操作方法,例如数据绑定(v-bind、v-model)、条件性渲染(v-if、v-else)、循环(v-for)、事件处理(v-on)等。 【uni-app组件系统】 uni-app配备了一套内容丰富的原生组件集合,这些组件依托于各平台的原生API,能够实现接近原生应用的交互效果。比如,按钮(button)、图像(image)、列表(list)、导航栏(navigator)、滑动视图(swiper)等。开发者可以通过设定配置属性、响应事件来调整组件的功能表现和视觉样式,达成自定义功能的目标。 【uni-app插件市场】 在具备内置组件之外,uni-app还拥有一个功能强大的插件市场,其中提供了众多第三方组件和API,覆盖了地图、支付、推送、广告等多种功能范畴。开发者可以便捷地集成这些...

8,906

社区成员

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

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