如何将包含HTML内容的SQL查询数据填充的XML文档对象输出到ColdFusion中的XML文件?

时间:2016-07-07 20:42:18

标签: html sql xml coldfusion coldfusion-10

我在ColdFusion中编写了一个脚本,它在数据库表中抓取我网站的所有HTML内容,并创建一个XML文档对象。以下是我的代码。

<!--- Get page info --->
<cfquery name="qPageInfo" datasource="#application.datasource#">
    SELECT top 800 id, title, info, app
    FROM sitePublic
</cfquery>

<cfdump var="#qPageInfo#">

<!--- Creating XML document object w/ sitePublic data --->
 <cfxml variable="xmlPageInfo">
    <page>
        <cfoutput query="qPageInfo">
            <id>#qPageInfo.id#</id>
            <pagecontent>#Trim("#XMLFormat(qPageInfo.info)#")#</pagecontent>
        </cfoutput>
    </page> 
 </cfxml>

 <!---<cfdump var="#xmlPageInfo#">--->

 <!--- Need to figure out how to output to a file --->
 <cffile action="write" file="%filepath%/webcontent.xml" output="#qPageInfo#">

我能够在XML文档对象上成功执行cfdump,并在浏览器窗口中转储所有网页的所有内容。

但是,我似乎无法工作的部分是将XML数据输出到XML文件的最后一行<cffile>。下面是我尝试运行执行此操作时遇到的错误。

  

表达式已请求变量或中间表达式结果作为简单值。但是,结果无法转换为简单值。简单值是字符串,数字,布尔值和日期/时间值。查询,数组和COM对象是复杂值的示例。

错误的最可能原因是您尝试将复杂值用作简单值。例如,您尝试在cfif标记中使用查询变量。

我是ColdFusion的新手,所以我可以在我的代码中留下一些东西,有没有人知道如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

我对此有一个大大小小的关注

<强>第一

<!--- Creating XML document object w/ sitePublic data --->
<cfxml variable="xmlPageInfo">
<page>
    <cfoutput query="qPageInfo">
        <id>#qPageInfo.id#</id>
        <pagecontent>#Trim("#XMLFormat(qPageInfo.info)#")#</pagecontent>
    </cfoutput>
</page> 
</cfxml>

这将生成大量<id><pagecontent>代码

考虑

<pagecontent id="#qPageInfo.id#">#Trim(XMLFormat(qPageInfo.info))#</pagecontent>

<强>第二

<cffile action="write" file="%filepath%/webcontent.xml" output="#qPageInfo#">

现在真正的问题是qPageInfo是查询。我怀疑你想写xml。

更简单的方法是将XML作为字符串处理

<cfsavecontent variable="xmlPageInfo">
<page>
    <cfoutput query="qPageInfo">
        <pagecontent id="#qPageInfo.id#">#Trim(XMLFormat(qPageInfo.info))#</pagecontent>
    </cfoutput>
</page> 
</cfsavecontent>


<cffile action="write" file="%filepath%/webcontent.xml" output="#xmlPageInfo#">

如果你想确保你正在处理xml而不只是一个xml的字符串

<cfxml variable="xmlPageInfo">
<page>
    <cfoutput query="qPageInfo">
        <pagecontent id="#qPageInfo.id#">#Trim(XMLFormat(qPageInfo.info))#</pagecontent>
    </cfoutput>
</page> 
</cfxml>


<cffile action="write" file="%filepath%/webcontent.xml" output="#ToString(xmlPageInfo)#">

答案 1 :(得分:2)

不确定您是否在问题中发布了实际代码,但您的%变量周围有#个百分号,而不是filepath个哈希标记。

此:

<cffile action="write" file="%filepath%/webcontent.xml" output="#qPageInfo#">

应该是这样的:

<cffile action="write" file="#filepath#/webcontent.xml" output="#xmlPageInfo#">

已更新为使用正确的变量xmlPageInfo来编写文件,正如其他人所提到的那样。