2013-10-29 27 views
4

例如,请考虑下面的代码片段:ColdFusion中使用CFIF

方案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 =亚马逊公司是我恰好在情景和谷歌公司,否则。

我的问题:

我必须基于公司的名称,这些数据插入到数据库中,并设置一个整数字段等于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 sign进行比较的公司名称是否实际进行了比较,如 它包含第一个单词之后的空格(例如Amazon和Inc之间的空格)。

请分享你的经验。

感谢

这里是我做过什么:

我有特定元素施加微调功能为好。例如:

在公司名称变量中的值是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我的输出。请让我知道,如果我比较错误。

+0

您不需要单独的查询来设置一个位标志。您遇到的问题是什么?如果节点包含* exact *值'Amazon,Inc',则它将被视为相等。你的实际代码有什么不同吗? – Leigh

+0

@Leigh请检查我更新的问题。谢谢 – Jack

+0

在引号之间尝试输出公司名称,以便您可以查看确切的修剪值。 '#companyName#'。引号将有助于查看是否还有更多字符不能删除修剪。 – Sanjeev

回答

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,然后在查询中使用它。

+0

另外,考虑在整个代码中使用更多的描述性变量名称*。例如,而不是'm'布尔标志的更好名称可能是'isAmazon'。 – Leigh

+0

很好的解释。谢谢Leigh!有效。 :) – Jack

+0

很高兴我可以帮助:) – Leigh

0

修剪功能仅适用于整个XML片段。你想:

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

说了你很多要考虑

a)具有数据库也从字符串转换为整数
OR
b)存储整个提取的字符串
OR
c)存储整个XML片段

+0

谢谢。请检查我现在遇到的问题。谢谢 – Jack

+0

当我有两串我认为匹配但没有的字符串时,我使用Len()做了一个快速的完整性检查,它没有透露任何内容,我可能会在这两个字符串中运行该页,保存结果转换为文本文件,并与十六进制编辑器进行比较。最后但并非最不重要的一点,我会尝试像' –

+0

感谢您的回答。 – Jack