如何替换&lt; 与<在ColdFusion中

Sam*_*len 0 regex xml rss coldfusion

我使用的ColdFusion从创建数据库条目的XML文档,当创建XML的<,并>在格式&lt;&gt;.所以在创建XML之前有没有办法将其更改&lt;<

下面是代码和输出示例:

<cfquery name="messages" datasource="showcase_Uk">
     select * from t_items where pid = 2 and spid = 45
</cfquery>

<cfset myStruct = StructNew() />
<cfset mystruct.link = "http://showcase.com" />
<cfset myStruct.title = "Examples" />
<cfset mystruct.description = "Examples from UK Showcase" />
<cfset mystruct.pubDate = Now() />
<cfset mystruct.version = "rss_2.0" />
<cfset myStruct.item = ArrayNew(1) />

<cfloop query="messages">
   <cfset myStruct.item[currentRow] = StructNew()>
   <cfset myStruct.item[currentRow].guid = structNew()>
   <cfset myStruct.item[currentRow].guid.isPermaLink="YES">
   <cfset myStruct.item[currentRow].guid.value = xmlFormat(#messages.id#)>
   <cfset myStruct.item[currentRow].pubDate = createDate(year(#messages.uploadDate#), month(#messages.uploadDate#), day(#messages.uploadDate#))>
   <cfset myStruct.item[currentRow].title = xmlFormat(#messages.name#)>
   <cfset myStruct.item[currentRow].description = StructNew() />
   <cfset myStruct.item[currentRow].description.value = xmlFormat(#messages.description#)>
</cfloop>


<cffeed action="create" name="#myStruct#" overwrite="true" xmlVar="myXML">

<cffile action="write" file="e:\domains\showcase.com\wwwroot\ukshowcasefeed.xml" nameconflict="overwrite" output="#XMLFormat(myXML)#">

 <cffile action="read" file="e:\domains\showcase.com\wwwroot\ukshowcasefeed.xml" variable="myfile">

 <cfoutput>#myfile#</cfoutput>
Run Code Online (Sandbox Code Playgroud)

然后是这里生成的代码的屏幕截图:

屏幕截图输出

我试过了ReplaceNoCase,根本不会改变它.我相信它可能与Regex有关,但我真的不知道.

Tom*_*lak 7

简单回答:

不要XmlFormat()在编写文件时,这就是导致您看到的双重编码的原因.


更长的回答:

我建议您使用映射来创建Feed:

<cfquery name="messages" datasource="showcase_Uk">
  select
    id, uploadDate, name, description, 'yes' as isPermaLink
  from
    t_items
  where
    pid = 2 and spid = 45
</cfquery>

<cfset feedMeta = {
  version: "rss_2.0",
  title: "Examples",
  link: "http://showcase.com",
  publisheddate: Now(),
  description: "Examples from UK Showcase"
}>

<cfset feedMap = {
  title: "name",
  content: "description",
  publisheddate: "uploadDate",
  id: "id",
  idpermalink: "isPermaLink"
}>

<cffeed
  action="create"
  properties="#feedMeta#" columnMap="#feedMap#" query="#messages#"
  xmlvar="feedXml"
>

<cffile
  action="write"
  file="#ExpandPath('/ukshowcasefeed.xml')#" nameconflict="overwrite" charset="utf-8"
  output="#feedXml#"
>
Run Code Online (Sandbox Code Playgroud)

请注意Feed创建的简单声明方法.没有循环,没有手动结构创建,只有数据驱动的输入到输出的映射.

还要注意charset="utf-8"<cffile>是,如果你不想碰上编码问题的关键所在.


如果您修改查询以使其具有正确的列名称,那么您甚至不需要以下feedMap结构:

<cfquery name="messages" datasource="showcase_Uk">
  select
    id, 
    'yes' as idpermalink
    uploadDate as publisheddate,
    name as title,
    description as content 
  from
    t_items
  where
    pid = 2 and spid = 45
</cfquery>

<cffeed
  action="create"
  properties="#feedMeta#" query="#messages#"
  xmlvar="feedXml"
>
Run Code Online (Sandbox Code Playgroud)