2013-10-29 80 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