如何在XML转换模板语句中调用ColdFusion函数,将属性值作为参数传递。例如,像:
<xsl:template match="date">
<cfoutput>#DateFormat(now(), <xsl:value-of select="@format"/>)#</cfoutput>
</xsl:template>
以下XML:
<date format="mm/dd/yy" />
会匹配并转换为DateFormat(now(), "mm/dd/yy")
的结果吗?可能吗?我能够使用DateFormat()
的静态参数来做,无法弄清楚如何从属性/节点中提取值并将其用作参数。谢谢!
更新
当前尝试的完整版本:
<cfxml variable="xmlData">
<?xml version="1.0"?>
<date format="mm/dd/yy" />
</cfxml>
<cfxml variable="stylesheet">
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="date">
<cfoutput>#DateFormat(now(), '<xsl:value-of select="@format"/>')#</cfoutput>
</xsl:template>
</xsl:stylesheet>
</cfxml>
<cfoutput>#XmlTransform(xmlData, trim(stylesheet))#</cfoutput>
会导致以下错误:
An error occured while Parsing an XML document. Element type "x2l:value-of" must be followed by either attribute specifications, ">" or "/>".
答案 0 :(得分:3)
好的,这就是我认为您正在尝试做的事情。您不能一次解析XSLT和ColdFusion。你必须做两次通行证。
<cfxml variable="xmlData">
<?xml version="1.0"?>
<date format="mm/dd/yy" />
</cfxml>
<cfxml variable="stylesheet">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="date">
#DateFormat(now(), "<xsl:value-of select="@format"/>")#
</xsl:template>
</xsl:stylesheet>
</cfxml>
<cfset filename = "#createUUID()#.cfm" />
<cffile action="write" file="#getDirectoryFromPath(getCurrentTemplatePath())##filename#" output="#XmlTransform(xmlData, trim(stylesheet))#"/>
<cfinclude template="#filename#"/>
答案 1 :(得分:2)
您可以使用CFML生成XSL模板。
您还可以使用XSL模板将适当的XML转换为CFML(如Patrick的回答)。
然而,这是两个不同的操作,不能同时发生(如果你需要两个动作,你必须做一个然后另一个)。
答案 2 :(得分:0)
看起来你只需要在价值附近引用。
<xsl:template match="date">
<cfoutput>#DateFormat(now(), '<xsl:value-of select="@format"/>')#</cfoutput>
</xsl:template>
这是一个完整的样式表,我tested with an online parser。
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="date">
<cfoutput>#DateFormat(now(), '<xsl:value-of select="@format"/>')#</cfoutput>
</xsl:template>
</xsl:stylesheet>
这是我用来测试的XML代码:
<?xml version="1.0"?>
<date format="mm/dd/yy" />
答案 3 :(得分:0)