4

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

场景一:

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

<Company>Amazon, Inc </Company>

场景二:

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

<Company>Google, Inc </Company>

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

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

 <cfset XMLResponse = XmlParse(

    httpResponse.fileContent.Trim()

    ) />

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

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

所以现在我有 arrCOMPANY = Amazon, Inc 是我碰巧在 Scenario 和 Google, Inc 否则。

我的问题:

我必须根据公司名称将这些数据插入数据库,如果公司名称是 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 符号比较的公司名称是否会被实际比较,因为它在第一个单词之后包含空格(例如 Amazon 和 Inc 之间的空格)。

请分享你的经验。

谢谢

这是我所做的:

我也对特定元素应用了修剪功能。例如:

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了我的输出。如果我比较错误,请告诉我。

4

2 回答 2

1

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

如果您cfdump使用该变量或将其包装在 中xmlFormat(),您将看到它包含整个节点,而不仅仅是文本。only 使用时很容易漏掉cfoutput,因为浏览器把 xml 当作标签,所以除非你查看源代码,否则它们是不可见的:

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

要仅获取节点文本,请使用该xmlText属性,然后对其进行修剪:

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

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

于 2013-10-30T10:48:24.213 回答
0

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

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

说了这么多想考虑

a) 让数据库进行从字符串到整数的转换

b) 存储整个提取的字符串

c) 存储整个 XML 片段

于 2013-10-29T13:49:54.770 回答