读取或者创建一个RSS或者Atom聚合节点。这个标签可以读 0.90,0.91, 0.92, 0.93, 0.94, 1.0,版本的RSS和0.3 or 1.0版本的Atom。它可以创建2.0版本的RSS或Atom 1.0节点。
create
必选
<cffeed
action = "create"
name = "#结构变量#"
更多如下:
outputFile = "路径"
xmlVar = "变量名"
可选
overwrite = "no|yes">
或者
必选
<cffeed
action = "create"
properties = "#元数据结构变量#"
query = "#选项/整个query名#"
更多如下:
outputFile = "路径"
xmlVar = "变量名"
可选
columnMap = "mapping 结构"
overwrite = "no|yes">
read
必选
<cffeed
source = "源节点"
更多如下:
name = "结构变量"
properties = "元数据结构变量"
query = "选项/整个query名"
outputFile = "路径"
xmlVar = "变量名"
可选
action = "read"
enclosureDir = "路径"
ignoreEnclosureError = "no|yes"
overwrite = "no|yes"
overwriteEnclosure = "no|yes"
proxyServer = "IP地址或者服务器主机域名"
proxyPassword = "密码或者代理主机"
proxyPort = "端口或者代理主机"
proxyUser = "用户名或者代理主机"
timeout = "所接受的超时时间"
userAgent = "HTTP 用户身份识别">
注: 你可以在attributeCollection 中指定这个标签的属性,作为一个结构的value,在attributeCollection 中指定结构的名称,并使用这个标签的属性名称作为这个结构的Keys.
|
属性 |
必选/可选 |
默认 |
描述 |
|---|---|---|---|
|
action |
可选 |
read |
take的动作,以下的值之一:
|
|
columnMap |
可选 |
|
只适用于query属性的创建动作。
一个结构,它指定了对象的栏目名字里的 mapping ,该对象用query属性和ColdFusion节点格式的栏目来指定。请看 Query object rules。 每一个域的关键字都必须是一个栏目的名字。 (请看 Query object rules 的表格)域的值必须是query对象相对应的栏目名, 该query对象是用来作创建动作的输入的。 |
|
enclosureDir |
可选 |
|
只适用于读取动作. 目录的路径,该目录可以保存任意的附件在被阅读的节点里使用。该路径可以是CFML文件的绝对路径或相对路径。 如果目录不存在,ColdFusion就会生成一个错误。如果你忽略了该属性,ColdFusion就不会保存该附件。为了指定这个包含了当前页面的目录,把该属性设置为 "." 。 |
|
ignoreEnclosureError |
可选 |
no |
如果该属性是yes,ColdFusion就试图保存所有的附件。如果它在写一个附件的时候发生了一个错误,它就会继续下载其他的附件并把错误信息写在服务器日志上。 如果这个属性是no,当ColdFusion在下载附件发生一个错误的时候,它就会停止下载所有的附件并提示一个错误。 注: 如果指定的附件是网络服务器无法下载的文件类型,附件就会发生错误。 |
|
name |
见注释 |
|
一个包含了完成的节点数据的结构:
当你指定了 创建动作的命名属性的时候,你必须在井字号里 (#)关闭它。 更多信息,请看 Name and properties structure rules. |
|
outputFile |
见注释 |
|
文件的路径,在该文件里以XML的文本写节点 路径可以是通往CFML文件的绝对路径和相对路径。 |
|
overwrite |
可选 |
no |
如果XML节点文件已经存在,是否改写XML节点文件,如果你没有把该属性设置成 yes,并且cffeed标签试图去写已经存在的文件, ColdFusion就会产生一个错误。 |
|
overwriteEnclosure |
可选 |
no |
只适用于读取的动作。 如果附件目录已经存在,是否在里面改写文件。如果你没有把该属性设置成yes,并且cffeed标签试图去写一个已经存在的文件,ColdFusion就会产生一个错误。 |
|
properties |
见注释 |
|
一个结构,它包含了节点元数据,和关于整个节点的信息。它可以包含以下内容:
功能和合并的query属性提供了完整的节点信息。 当你为一个创建动作指定了功能属性的时候,你必须把它放在井字号中 (#)。 |
|
proxyPassword |
可选 |
|
代理服务器要求的密码。 |
|
proxyPort |
可选 |
80 |
服务器上连接的端口 |
|
proxyServer |
可选 |
|
代理服务器所要发送给的主机名和IP地址。 |
|
proxyUser |
可选 |
|
提供给代理服务器的的用户名。 |
|
query |
见注释 |
|
在节点里包含了Atomitem元素或RSSitem元素的query对象。可以包含以下内容:
功能和合并的query属性提供了完整的节点信息。 当你为一个创建动作指定了功能属性的时候,你必须把它放在井字号中 (#)。 更多信息,请看 Query object rules。 |
|
source |
必选 |
|
只适用于读取动作。 节点的URL或通往包含了节点内容的XML 文件的路径。路径可以是通往CFML文件绝对路径,或者相对路径。 |
|
timeout |
可选 |
请求响应超时 |
等待节点来源回应的时间秒数。如果该值是零,说明请求没有时间。 默认的情况下,ColdFusion Server Settings > Settings page可以设置请求超时时间 |
|
userAgent |
可选 |
Cold |
在 HTTP客户端变量请求头域里输入的文本。用来确认客户端软件的请求。 |
|
xmlVar |
见注释 |
|
一个变量用来保存XML文本格式的读取或者创建的节点。 |
cffeed标签让你可以用很多种多边的方式指定或者保存节点数据。
当你创建一个节点的时候
当你读取一个节点的时候
你可以用以下表单的任意组合方法来保存节点数据:
当你保存节 数据的时候,你不用同时保存和entry元素或item元素数据。你只可以指定 功能 属性,或只可以指定query 属性。
Name and properties structure rules命名和功能结构规则
命名和功能属性必须遵循以下规则。更多指定元数据entry元素的请求信息,请看Representing feed metadata.:
就算是只有一个单独的元素,ColdFusion还是用了一个数组。如果一个 Atom 节点只有一个 link 元素, 比如说,你必须使用以下的格式来指定在命名属性结构的元素:
比如说,要在一个 Atom 1.0 节点里指定一个link 元数据entry元素,你可以使用以下的代码:
<cfset meta.link = arrayNew(1)> <cfset meta.link[1] = structNew()> <cfset meta.link[1].href = "http://www.myCo,com">
Atom: W3C date format, 比如2006-07-11T18:19:00Z.
RSS: in RFC 822 Format, 比如Thu, 05 Oct 2006 18:19:00 GMT.
用query属性指定的query 对象必须遵循以下规则:
<author>
<person>Anthony</person>
<uri>http://www.MyCo.com</uri>
<email>Tony@MyCo.com</email>
</author>
<author>
<person>Beverly</person>
</author>
<author>
<person>Cathy</person>
<email>cathy@MyCo.com</email>
</author>
ColdFusion query 代表了以下这些栏目:
|
AUTHOR_PERSON |
AUTHOR_URI |
AUTHOR_EMAIL |
|---|---|---|
|
Anthony,Beverly,Cathy |
http://www.MyCo.com, , |
Tony@MyCo.com, ,cathy@MyCo.com |
下面的这些表格罗列了被query属性指定的标准query对象的栏目。如果一个 RSS 节点 包含了 Dublin Core extensions 或 iTunes extensions, query就包含了附加的栏目。更多这些 fields的信息,请看 Dublin Core Extensions 和 Apple iTunes Extensions。
|
Column |
Atom entry |
RSS item |
|---|---|---|
|
AUTHOREMAIL |
author元素email属性 |
author item |
|
AUTHORNAME |
author元素name属性 |
不能使用 |
|
AUTHORURI |
author元素uri属性 |
不能使用 |
|
CATEGORYLABEL |
category元素lable属性 |
category item值 |
|
CATEGORYSCHEME |
category元素scheme属性 |
category item域属性 |
|
CATEGORYTERM |
category元素term属性 |
不能使用 |
|
COMMENTS |
不能使用 |
comments item值 |
|
CONTENT |
content 元素值 |
description item值 |
|
CONTENTMODE |
content 元素mode属性 (只适用于Atom 0.3 ) |
不能使用 |
|
CONTENTSRC |
content 元素src属性 |
不能使用 |
|
CONTENTTYPE |
content 元素type属性 |
不能使用 |
|
CONTRIBUTOREMAIL |
contributor元素email属性 |
不能使用 |
|
CONTRIBUTORNAME |
contributor元素命名属性 |
不能使用 |
|
CONTRIBUTORURI |
contributor元素uri属性 |
不能使用 |
|
CREATEDDATE |
created 元素值(只适用于Atom 0.3 ) |
不能使用 |
|
EXPIRATONDATE |
不能使用 |
expirationDate item 值 (RSS 0.93 only) |
|
ID |
id元素值 |
guid item 值 |
|
IDPERMALINK |
不能使用 |
guid item ispermalink 属性 |
|
LINKHREF |
link 元素href属性。 |
enclosure item url 属性 |
|
LINKHREFLANG |
link 元素hreflang属性。 |
不能使用 |
|
LINKLENGTH |
link 元素length属性。 |
enclosure item length 属性 |
|
LINKREL |
link 元素rel 属性。 |
不能使用 |
|
LINKTITLE |
link 元素 title属性。 |
不能使用 |
|
LINKTYPE |
link 元素type属性。 |
enclosure item type 属性 |
|
PUBLISHEDDATE |
published 元素值(Atom 0.3存疑) |
pubDate item 值 |
|
RIGHTS |
rights 元素值 (Atom 0.3获得版权) |
不能使用 |
|
RSSLINK |
不能使用 |
link item 值 |
|
SOURCE |
不能使用 |
source item 值 |
|
SOURCEURL |
不能使用 |
source item url 属性 |
|
SUMMARY |
summary 元素值 |
不能使用 |
|
SUMMARYMODE |
summary 元素mode属性 (只适用于Atom 0.3 )。 |
不能使用 |
|
SUMMARYSRC |
Blank for all well-formed Atom 节点s. Contains data only if an Atom 1.0 节点 uses a content element format for the summary element。 |
不能使用 |
|
SUMMARYTYPE |
summary 元素 type属性。 |
不能使用 |
|
TITLE |
title 元素值 |
title item 值 |
|
TITLETYPE |
title 元素type属性。 |
不能使用 |
|
UPDATEDDATE |
updated元素值(在 Atom 0.3更新) |
不能使用 |
|
URI |
不能使用 |
RSS 1.0 link item rdf:about 属性 |
|
XMLBASE |
content 元素 xml:base 属性。 |
不能使用 |
当你创建一个节点的时候,命名属性和功能属性可以代表所有标准的 RSS 2 或 Atom 1 节点的 元数据,格式在Name and properties structure rules 章节里有详细描述。同样的,当你读取一个节点的时候,结构代表了所有接收到的元数据.。下面的规则用来约束在命名属性和功能结构里指定节点元数据:
Dublin Core extension 元素提供了关于节点或者一个item的附加元数据 。你可以使用 cffeed标签来读取节点,这个节点包含了符合 作为元数据(channel元素) 或者 item 元素的 Dublin Core Metadata Element Set specification。更多关于 Dublin Core extension元素的细节信息,请看 Dublin Core Metadata Element Set specification.。这时候,这个主题就已经写好了,这个指定在http://dublincore.org/documents/dces/是可行的。
ColdFusion 支持 Dublin Core extensions 的同时有以下限制:
当 节点 items包含了 Dublin Core extension的时候, 用一个query属性指定的 query 包含了所有在下面的表格里罗列的栏目。如果 节点 没有包含任何 Dublin Core extension 元素, query 就不会包含栏目。 除了 DC_SUBJECT_TAXONOMURI 和 DC_SUBJECT_VALUE 栏目, 每一个栏目名(不包括 DC_ prefix) 都直接对应一个 Dublin Core extension 元素名。
|
栏目 |
描述 |
|---|---|
|
DC_CONTRIBUTOR |
负责组织资源的人员或者组织。 |
|
DC_COVERAGE |
在资源里的内容的范围。 |
|
DC_CREATOR |
负责创建资源的人员和组织。 |
|
DC_DATE |
与资源相关的日期或者日期时间。 |
|
DC_DESCRIPTION |
资源内容的摘要 |
|
DC_FORMAT |
文件格式,物理介质,或者尺寸的资源。 |
|
DC_IDENTIFIER |
一个字符串,可以用来快速定义资源。 |
|
DC_LANGUAGE |
资源所用的语言。 |
|
DC_PUBLISHER |
制作可行资源的人员或组织。 |
|
DC_RELATION |
特指相关资源的定义者。 |
|
DC_RIGHT |
关于资源的归属权限的信息。 |
|
DC_SOURCE |
从资源中导出的参考资料。 |
|
DC_SUBJECT_TAXONOMYURI |
Dublin Core subject元素的 taxonomy URI属性。 |
|
DC_SUBJECT_VALUE |
Dublin Core subject元素的值,资源顶部的一个字符串。 |
|
DC_TITLE |
资源使用的名字 |
|
DC_TYPE |
性质或类型的资源。 |
当你从一个包含了Dublin Core 元素的结构的节点里取得数据的时候, 元素的名字是定义在query栏目清单的顶部的,并且它带着代表性的Dublin Core subject元素的例外。结构的格式把主题元素代表成一个dc_subject entry,该dc_subject entry包含了一个结构的数组。数组里的结构有带有名字值的关键字,是针对元素值和taxononmyURI,以及taxonomyURI 属性来说的。
你可以使用cffeed标签来创建或者读取包含了定义在Apple iTunes RSS podcast 指定里的元素的节点。关于 iTunes extension 格式的更多细节信息,请看Apple iTunes RSS 指定。这次主题已经写出,指定在http://www.apple.com/itunes/store/podcaststechspecs.html也是可用的。
你可以创建一个只有 iTunes RSS extensions这样一个子节点。当你读取节点的时候,ColdFusion会忽略所有不在支持子节点的iTunes extension 元素。
下面的表格罗列出结构entries或者支持的元素的query栏目名。(这些名字包含了iTunes extension元素名后面的 ITUNES_ prefix ) 。表格也显示了在元数据里使用的元素,有些元素在单独的item里使用,有些元素两种情况都能使用。
|
元素 |
如何使用 |
描述 |
|---|---|---|
|
ITUNES_AUTHOR |
两者都可以使用 |
艺术家名 |
|
ITUNES_BLOCK |
两者都可以使用 |
一个值为yes的请求,目的是防止podcast 或 item (episode)出现。 当ColdFusion读取一个节点的时候,你的程序可以定义这个域的值并运行任何适当的的操作。 |
|
ITUNES_DURATION |
Item |
item 的秒数长,或者是以 HH:MM:SS为格式的item |
|
ITUNES_EXPLICIT |
两者都可以使用 |
一个字符串,说明了单个的item 或多个item是否包含明确的资料。有效值是yes,no或者clear。 |
|
ITUNES_KEYWORDS |
两者都可以使用 |
一个用逗号隔开的清单,清单罗列了当你在 iTunes music store搜索的时候,使用的文字或词语。 |
|
ITUNES_SUBTITLE |
两者都可以使用 |
短的描述文字,通常只用几个字描述 |
|
ITUNES_SUMMARY |
两者都可以使用 |
一个比较长的秒数(最多是4000字) |
你也可以在性能结构中使用下面的channel 元素。
|
元素 |
描述 |
|---|---|
|
itunes_category |
一个结构,指定了 iTunes Music Store类别,该结构有以下两个域
注意:这些元素名没有itunes_ prefix. |
|
itunes_image |
podcast.的artwork URL |
|
itunes_owner |
一个结构,包含了用于沟通的podcast的拥有者的关联信息。结构有以下两个 fields:
|
当你创建一个 节点的时候,你可以在一个命名结构里或则和在一个 query 对象和一个 properties 结构的组合里指定节点的内容。 cffeed 标签产生了节点的XML ,并把它保存在用xmlVar属性指定的变量里。文件是用outputFile属性来指定的,或者两者都可以。
要创建一个 RSS 2.0 节点 ,你必须在一个命名结构里或者在一个性能结构里指定以下的元数据域。所有其他的 RSS2.0 元数据域, 和所有的 item 域, 都是可选的。
cffeed标签不会强行给在它创建的 Atom 节点规定任何规则 。你有责任确认节点是否有效。
在大多数情况下,一个数据库表格使用的栏目名都区别于你必须用来创建节点的栏目名。这样的话,你必须使用columnmap 属性来绘制输入的query栏目名给已经请求的栏目名。该属性是一个结构,结构的关键字是用cffeed标签请求的栏目名,而结构的值对应输入的query栏目。下面的范例用cfartgallery 数据源的顺序表格创建了一个节点。它 绘制了 ORDERDATE 栏目给query publisheddate 栏目, 也绘制了 ADDRESS 栏目 给 content 栏目,等等。 范例的代码接着显示了产生的query XML,用来展示结果:
<!--- Get the 节点 data as a query from the orders table. --->
<cfquery name="getOrders" datasource="cfartgallery">
SELECT * FROM orders
</cfquery>
<!--- Map the orders column names to the 节点 query column names. --->
<cfset columnMapStruct = StructNew()>
<cfset columnMapStruct.publisheddate = "ORDERDATE">
<cfset columnMapStruct.content = "ADDRESS">
<cfset columnMapStruct.title = "CUSTOMERFIRSTNAME">
<cfset columnMapStruct.rsslink = "ORDERID">
<!--- Set the 节点 metadata. --->
<cfset meta.title = "Art Orders">
<cfset meta.link = "http://节点link">
<cfset meta.description = "Orders at the art gallery">
<cfset meta.version = "rss_2.0">
<!--- Create the 节点. --->
<cffeed action="create"
query="#getOrders#"
properties="#meta#"
columnMap="#columnMapStruct#"
xmlvar="rssXML">
<cfdump var="#XMLParse(rssXML)#">
cffeed标签没有验证它读取的节点。它可以读取有效的或则和是零散的格式化节点, 但是忽略论一些或者所有的无效内容。比如说,如果你在 Atom 节点 (它作废了这个节点), 给了多于一个的对的元素, cffeed 标签就会忽略第一个之后的元素,并且不产生一个错误提示。
节点里的日期和时间是以 W3C 或 RFC 822 的格式来读取的。 ColdFusion也可以读取通常在the iTunes music store里使用的格式的 iTunes extension 日期。
下面的范例创建了一个 RSS 节点。你必须输入 节点 title, link, 和 description 元素。你还必须给一个item输入title, link 和 description 域。第二个 item是可选的。应用程序在createRSSOutput.xml文件里保存节点,该文件位于节点Test 子目录 ,而根目录包含了 CFML 页面。
<!--- Generate the 节点 when the user submits a filled in form. --->
<cfif isDefined("Form.Submit")>
<cfscript>
// Create the 节点 data structure and add the metadata.
myStruct = StructNew();
mystruct.link = form.link;
myStruct.title = form.title;
mystruct.description = form.description;
mystruct.pubDate = Now();
mystruct.version = "rss_2.0";
/* Add the 节点 items. A more sophisticated application would use dynamic variables
and support varying numbers of items. */
myStruct.item = ArrayNew(1);
myStruct.item[1] = StructNew();
myStruct.item[1].description = StructNew();
myStruct.item[1].description.value = form.item1text;
myStruct.item[1].link = form.item1link;
myStruct.item[1].pubDate = Now();
myStruct.item[1].title = form.item1title;
myStruct.item[2] = StructNew();
myStruct.item[2].description = StructNew();
myStruct.item[2].description.value = form.item2text;
myStruct.item[2].link = form.item2link;
myStruct.item[2].pubDate = Now();
myStruct.item[2].title = form.item2title;
</cfscript>
<!--- Generate the 节点 and save it to a file and variable. --->
<cffeed action = "create"
name = "#myStruct#"
outputFile = "节点Test/createRSSOutput.xml"
overwrite = "yes"
xmlVar = "myXML">
</cfif>
<!--- The user input form. --->
<cfform format="xml" preservedata="yes" style="width:500" height="700">
<cfformitem type = "text"> Enter The 节点 Metadata</cfformitem>
<cfinput type = "text" label = "title" name = "title"
style = "width:435" required = "yes"> <br />
<cfinput type = "text" label = "link" name = "link"
style = "width:435" required = "yes" validate = "url"> <br />
<cftextarea name = "description"
style = "width:435; height:70" required = "yes" />
<cfformitem type = "text"> Enter Item 1</cfformitem>
<cfinput type="text" label="title" name="item1title"
style="width:435" required="yes"> <br />
<cfinput type="text" label="link" name="item1link"
style="width:435" required="yes" validate="url"> <br />
<cftextarea name = "item1text"
style = "width:435; height:70" required = "yes" /> <br />
<cfformitem type = "text"> Enter Item 2</cfformitem>
<cfinput type = "text" label = "title" name = "item2title" style = "width:435"> <br />
<cfinput type = "text" label = "link" name = "item2link" style = "width:435"
validate = "url"> <br />
<cftextarea name = "item2text" style = "width:435; height:70" /> <br />
<cfinput type = "Submit" name = "submit" value = "Submit" >
</cfform>
下面程序是一个简单的节点读取器,该读取器 handles RSS 和 Atom 节点s.。它显示了节点 title; 为每一个item 或 entry, 还把 title作为一个链接来展示,同时也展示了 published date 和 the item 或entry 内容。要使用这个范例来读取用第一个程序创建的节点,输入程序创建的文件的 URL,比如说:http://localhost:8500/cffeed/节点Test/createRSSOutput.xml.
<!--- Process the 节点 data if the user submitted the form --->
<cfif isDefined("Form.Submit")>
<cffeed source = "#theURL#"
properties = "myProps"
query = "myQuery">
<!--- Display the 节点 output.
Use conditional logic for to handle different 节点 formats. --->
<cfoutput>
<h2>#myProps.title#</h2>
</cfoutput>
<cfoutput query = "myQuery">
<cfif myProps.version IS "atom_1.0">
<h3><a href = "#linkhref#">#title#</a></h3>
<p><b>Published:</b> #DateFormat(publisheddate)#</p>
<cfelse>
<h3><a href = "#rsslink#">#title#</a></h3>
<p><b>Published:</b> #publisheddate#</p>
</cfif>
<p>#content#</p>
</cfoutput>
</cfif>
<!--- The form for specifying the 节点 URL or file --->
<cfform name = "Set节点" preserveData = "yes">
Enter 节点 URL:
<cfinput type = "text" size = "60" name = "theURL"><br><br>
<cfinput type = "Submit" name = "submit" value = "Submit">
</cfform>