例如,请考虑以下代码段:
情景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
作为我的输出。如果我比较错误,请告诉我。
答案 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片段