ColdFusion - 将XML作为参数传递给CF10中的xmlTransform()

时间:2013-05-29 20:56:58

标签: xml xslt parameters coldfusion

美好的一天 -

在ColdFusion 9中,我们可以将XML参数传递给xmlTransform(),如下所示:

<cfxml variable="parm">
  <users>
     <user>Joe Blow</user>
     <user>Jane Doe</user>
  </users>
</cfxml>

<cfset params=structNew()>
<cfset params["users"]=parm>
<cfset newXML=xmlTransform(xmlFile,xslFile,params)>

然后,在XSL中,我们可以接受“users”参数:

<xsl:param name="users" select="." />

并将其用作变量,在其上运行XPath等。

但是,对于ColdFusion 10,将XML参数传递给任何XSL都会导致错误。这是非常无益的,没有任何错误日志显示任何细节。

显示的错误只是:

    An error occured while Transforming an XML document. 

  

coldfusion.xml.XmlProcessException:转换XML文档时发生错误。在coldfusion.xml.XmlProcessor.doTransform(XmlProcessor.java:508)的coldfusion.xml.XmlProcessor.access $ 100(XmlProcessor.java:82),位于java的coldfusion.xml.XmlProcessor $ 3.run(XmlProcessor.java:455)。位于coldfusion.xml.XmlProcessor.transform(XmlProcessor.java:440)的coldfusion.AmlController.doPrivileged(本地方法)位于coldfusion.rmlProcessor.transform(XmlProcessor.java:440)的coldfusion.runtime.CFPage.XmlTransform(CFPage。 java:359)在cffusionxml2ecfm41929416.runPage(E:\ test \ testxml.cfm:36)at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244)at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java: 444)at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)at coldfusion.filter.IpFilter.invoke(IpFilter.java:64)at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:443)at)。 ..(等)

我已经将其缩小到特定于将XML作为参数传递的操作。如果将其更改为字符串而不是XML,则它“工作”,因为它不会出现此错误。这对于一个空的XSLT来说很好,但当然我们需要将它作为XML传递,以便我们可以例如在数据上使用XPath。

ColdFusion 10是否已更改,以便它不再允许XML参数到xmlTransform()?非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我看到了同样的事情,但仍然失败了 - 但发现它失败了,因为参数struct的“值”恰好是一个数字。

例如,<cfset xslparameters["regionID"] = 223>失败,<cfset xslparameters["regionID"] = "223">

失败

诀窍是强制换行为字符串:<cfset xslparameters["regionID"] = ToString("223")>

或在我的情况下,技术上,

<cfset xslparameters["regionID"] = "#ToString(serviceRegion.region_id)#">

答案 1 :(得分:0)

另一个重要的安全提示:

如果您在 Linux 上运行 CF,请记住 CF 会将所有结构键更改为大写。

例如:

在 XSL 中,<xsl:param name="PARMNAME"> 元素和正文中的 $PARMNAME 引用需要将所有参数名称转换为大写。