【问题标题】:How do I output an XML document object that is populated with SQL query data containing HTML content to an XML file in ColdFusion?如何将填充了包含 HTML 内容的 SQL 查询数据的 XML 文档对象输出到 ColdFusion 中的 XML 文件?
【发布时间】:2016-07-07 20:42:17
【问题描述】:

我在 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,并将所有网页的所有内容转储到浏览器窗口中。

但是,我似乎无法工作的部分是最后一行,&lt;cffile&gt; 将 XML 数据输出到 XML 文件。以下是我在尝试运行时遇到的错误。

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

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

我是 ColdFusion 的新手,所以我可能会在我的代码中遗漏一些东西,有人知道如何解决这个问题吗?

【问题讨论】:

  • 与您的问题无关,但嵌套函数调用时不需要引号或额外的井号。即使用#Trim( XMLFormat(qPageInfo.info) )# 而不是#Trim("#XMLFormat(qPageInfo.info)#")#
  • 不应该 output="#qPageInfo#"output="#xmlPageInfo#" 您构建 xml,然后使用查询输出而不是 xml。
  • 对于延迟回复,我深表歉意。感谢 Leigh 和 haxtbh 向我指出这些细节。

标签: html sql xml coldfusion coldfusion-10


【解决方案1】:

我对此有大大小小的担忧

第一

<!--- 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>

这将生成大量&lt;id&gt;&lt;pagecontent&gt; 标签

考虑

<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)#">

【讨论】:

  • 您最终使用了哪种方法? &lt;cfsavecontent&gt;&lt;cfxml&gt; ?
  • 我使用了&lt;cfxml&gt;方法。
【解决方案2】:

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

这个:

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

应该是这样的:

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

更新为使用正确的变量xmlPageInfo 来写入其他人提到的文件。

【讨论】:

  • 嗨,米格尔,感谢您的回复。我应该对此发表评论。我只是将 %filepath% 放在那里作为占位符,所以我知道以后要放置完整的文件路径。对此感到抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-06
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
相关资源
最近更新 更多