在coldfusion中使用cfif

时间:2013-10-29 13:43:10

标签: xml coldfusion coldfusion-8

例如,请考虑以下代码段:

情景1:

我作为SOAP响应的一部分收到的公司名称如下:

<Company>Amazon, Inc </Company>

情景2:

我作为SOAP响应的一部分收到的另一个公司名称如下:

<Company>Google, Inc </Company>

基本上,从用户端我输入一些信息,并根据我在<Company>标记内获得不同的公司名称。

以下代码显示了我如何将响应存储在XMLResponse变量

 <cfset XMLResponse = XmlParse(

    httpResponse.fileContent.Trim()

    ) />

以下代码显示了我如何解析响应并将内容存储在变量中:

<cfset arrCOMPANY = XmlSearch(
             XMLResponse,
             "//*[name()='Company']"
             ) /> 

所以现在我有arrCOMPANY =亚马逊,Inc恰好是在Scenario和谷歌公司。

我的问题:

我必须根据公司名称将这些数据插入数据库,如果公司名称是Amazon,Inc,则将整数字段设置为等于1 并为所有其他公司设置为零。

如果我遵循正确的道路,请告诉我:

我正在考虑根据公司名称编写两个cfqueries,因此我想考虑以下条件:

<cfif arrCompany eq "Amazon, Inc">

// Here I will write cfquery with an integer field = 1


Or 

<cfif arrCompany eq "Google, Inc">

// Here I will write cfquery with integer field 0

所以,我正在进行正确的比较,我想知道我将与eq标志进行比较的公司名称是否会实际比较或不作为 它包含第一个单词后的空格(例如亚马逊和公司之间的空格)。

请分享您的经验。

由于

这是我做的:

我也在特定元素上应用了trim功能。例如:

CompanyName变量中的值为Amazon, Inc

<cfset CompanyName = Trim(arrCompany[1])>  // adding index 1 because  it's a complex structure

以下是我尝试使用cfif条件的方法:

<cfif CompanyName eq "Amazon, Inc">

    <cfset m = 1>

    <cfelse>

    <cfset m = 0>  

    </cfif> 

    <cfoutput>#m#</cfoutput>

尽管如上所述,我得到了0作为我的输出。如果我比较错误,请告诉我。

2 个答案:

答案 0 :(得分:1)

  

<cfset CompanyName = Trim(arrCompany[1])>

如果您cfdump该变量,或将其包装在xmlFormat()中,您将看到它包含整个节点,而不仅仅是文本。仅使用cfoutput时很容易错过,因为浏览器会将xml视为标记,因此除非您查看源代码,否则它们不可见:

<cfoutput>#XMLFormat(CompanyName)#</cfoutput>

要仅抓取节点文本,请使用xmlText属性,然后修剪它:

<cfset CompanyName = trim( arrCompany[1].xmlText )>

编辑另外,正如评论中所述,您不需要单独的查询来设置bit标记。只需根据公司名称将CF变量设置为1或0,然后在查询中使用它。

答案 1 :(得分:0)

trim函数仅适用于整个XML片段。你想要:

<cfset arrCOMPANY = trim(XmlSearch(
         XMLResponse,
         "//*[name()='Company']"
         )) />

说过很多人想要考虑

a)让数据库进行从字符串到整数的转换 OR
b)存储整个提取的字符串
OR
c)存储整个XML片段