我正在ColdFusion中构建一些XML来将数据发送到QuickBooks。我可以使用<cfoutput>
罚款中的数据构建变量。像这样:
<cfoutput query="get">
<cfset #x# =
'
<InvoiceAddRq>
<InvoiceAdd>
<CustomerRef>
<ListID>XXXXX</ListID>
</CustomerRef>
<ClassRef>
<ListID>XXXXX</ListID>
</ClassRef>
<TxnDate>2010-11-04</TxnDate>
<InvoiceLineAdd>
<ItemRef>
<ListID>XXXXX</ListID>
</ItemRef>
<Desc>XXXXX</Desc>
<Quantity>XXXXX</Quantity>
<Rate>XXXXX</Rate>
</InvoiceLineAdd>
</InvoiceAdd>
</InvoiceAddRq>
'
>
但我需要创建XML,我在<cfloop>
内部使用<cfset>
循环查看订单项详细信息。这就是我想要做的事情:
<cfoutput query="get">
<cfset #x# =
'
<InvoiceAddRq>
<InvoiceAdd>
<CustomerRef>
<ListID>XXXXX</ListID>
</CustomerRef>
<ClassRef>
<ListID>XXXXX</ListID>
</ClassRef>
<TxnDate>2010-11-04</TxnDate>
<cfquery name="getDetails">
</cfquery>
<cfloop query="getDetails">
<InvoiceLineAdd>
<ItemRef>
<ListID>XXXXX</ListID>
</ItemRef>
<Desc>XXXXX</Desc>
<Quantity>XXXXX</Quantity>
<Rate>XXXXX</Rate>
</InvoiceLineAdd>
</cfloop>
</InvoiceAdd>
</InvoiceAddRq>
'
>
这显然无法正常工作,因为它正在查看XML的属性和属性。我试图弄清楚如何编写一些XML然后执行我的查询和循环以获取行项目详细信息然后返回到XML。我很难知道如何做到这一点。 我希望这是有道理的,任何帮助都会受到高度赞赏。
答案 0 :(得分:7)
您可以尝试使用<cfxml>
或<cfsavecontent>
来构建XML字符串。
<cfxml variable="your_xml_var" caseSensitive="yes">
<InvoiceAddRq>
<Anothertag>
</Anothertag>
<cfloop query="your_query">
<Somedata foo="#your_query.bar#">
#your_query.blah#
</Somedata>
</cfloop>
</InvoiceAddRq>
</cfxml>
<cfsavecontent variable="your_xml_var">
<InvoiceAddRq>
<cfloop query="your_query">
<Anothertag />
</cfloop>
</InvoiceAddRq>
</cfsavecontent>
答案 1 :(得分:1)
尝试在cfoutput和cfsavecontent中包装你的xml构建如果你在.cfm或.cfc文件中,它不应该认为cfquery或cfloop(或任何cf~标签)实际上是xml的一部分,将在页面执行时被删除。
答案 2 :(得分:0)
根据您使用的CF版本,您可能希望“滚动自己的”响应并简单地手动生成XML字符串。如果要将XML输出到屏幕,请确保执行重置,以便除了原始XML之外不向屏幕发送任何内容。此外,确保在浏览器中查看时调整CF调试,否则输出将无法正常显示。
<cfsilent>
<cfset retVal = "">
<cfquery name="get">
DO SOMETHING HERE
</cfquery>
<cfloop query="get">
<cfset retVal &= "<InvoiceAddRq><InvoiceAdd><CustomerRef><ListID>XXXXX</ListID></CustomerRef>">
<cfset retVal &= "<ClassRef><ListID>XXXXX</ListID></ClassRef><TxnDate>2010-11-04</TxnDate>">
<cfquery name="getDetails">
DO SOMETHING HERE
</cfquery>
<cfloop query="getDetails">
<cfset retVal &= "<InvoiceLineAdd><ItemRef><ListID>XXXXX</ListID></ItemRef>">
<cfset retVal &= "<Desc>XXXXX</Desc><Quantity>XXXXX</Quantity><Rate>XXXXX</Rate></InvoiceLineAdd>">
</cfloop>
<cfset retVal &= "</InvoiceAdd></InvoiceAddRq>">
</cfloop>
</cfsilent>
<cfcontent reset="yes">#retVal#</cfcontent>