【问题标题】:ColdFusion - pass XML as parameter to xmlTransform() in CF10ColdFusion - 将 XML 作为参数传递给 CF10 中的 xmlTransform()
【发布时间】:2013-05-29 20:56:58
【问题描述】:

美好的一天 -

在 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 中,我们可以接受“用户”参数:

<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) 在coldfusion.xml.XmlProcessor$3.run(XmlProcessor.java:455) 在java。安全.AccessController.doPrivileged(Native Method) 在coldfusion.xml.XmlProcessor.transform(XmlProcessor.java:451) 在coldfusion.xml.XmlProcessor.transform(XmlProcessor.java:440) 在coldfusion.runtime.CFPage.XmlTransform(CFPage. java:359) 在 cftestxml2ecfm41929416.runPage(E:\test\testxml.cfm:36) 在 Coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244) 在 Coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java: 444) 在coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65) 在coldfusion.filter.IpFilter.invoke(IpFilter.java:64) 在coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:443) 在) 。 ..(等等)

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

ColdFusion 10 是否已更改为不再允许将 XML 参数传递给 xmlTransform()?非常感谢任何帮助。

【问题讨论】:

  • 根据documentation found here XmlTransform() 函数仍然接受相同的参数。需要注意的是 ColdFusion 10 添加了对 XSLT 2.0 语法的支持。您能否向我们展示您尝试传递给函数的失败 XML 示例?
  • 嗨 Miguel,CF10 中的错误与传递的 XML 无关。将上面显示的“用户”XML 作为参数传递就足以导致问题。注释掉参数,或将“用户”设为字符串,可以消除错误。无需尝试访问 XSL 中传递的 XML;简单地传递 any XML 会导致错误。
  • 您能展示一下您正在使用的 XSLT 吗?
  • 您好,我没有明确指出这一点,但没关系。 XSL 可能是空白的,但对于 XML 声明,它失败了。将 XML 参数传递给 XMLTransform() 的行为是导致错误的原因,与 XSL 无关。请注意,这个问题已经有将近两年的历史了,从那以后我就没有重新测试过。

标签: xml xslt parameters coldfusion


【解决方案1】:

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

例如,&lt;cfset xslparameters["regionID"] = 223&gt; 失败,&lt;cfset xslparameters["regionID"] = "223"&gt; 也是如此

诀窍是强制换行为字符串:&lt;cfset xslparameters["regionID"] = ToString("223")&gt;

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

&lt;cfset xslparameters["regionID"] = "#ToString(serviceRegion.region_id)#"&gt;

【讨论】:

    【解决方案2】:

    另一个重要的安全提示:

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

    例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 2014-07-30
      相关资源
      最近更新 更多