使用 ColdFusion 处理 XML 复杂对象响应

Handling XML complex object response with ColdFusion

我正在使用 cfhttp 调用服务调用,我在其中设置 cfhttpparam type = 'url' name $format value = 'xml' 以在 xml 中获得响应。我已经转储了我的变量,文件内容中的所有内容都显示格式在 xml 我认为因为它说并列出了我正在调用的所有变量。所以我假设对结果使用 XMLParse 可以让我从结果中获取数据并将它们定义为我可以在网络上使用的变量。

<cfset request.getResponse = structNew() />
<cfhttp
method="get"
url="http://testsite"
result="request.getResponse " username="xxxxxx" password="test">
<cfhttpparam type="url" name="$expand" value="GetRoles,GetVendors" />
<cfhttpparam type="url" name="$format" value="xml" />
</cfhttp>
<cfdump var="#request.getResponse #">

<cfset FullResponse = XMLParse(request.getResponse )>

<cf_upXMLToStruct XML="#FullResponse#" SoftError="false" variable = "structResponse">


        <cfset rspFirstName = UCASE(trim(structResponse.XML_STRUCT.FirstName)) />
        <cfset rspShoteName = trim(structResponse.XML_STRUCT.ShortName) />
        <cfset rspCompanyName = trim(structResponse.XML_STRUCT.CompanyName) />

但是我得到一个错误:

Complex Object types cannot be converted to simple values.

我对 XML 还是个新手,所以我不确定我需要做什么来评估 XML。这是我收到的回复的片段:

<entry>
<id>http:// TEST/VendorDetailsSet('1000000240')</id>
<title type="text">VendorDetailsSet('1000000240')</title>
<updated>2017-05-18T15:24:44Z</updated>
<category term=" TEST.VendorDetails" 
scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
<link href="VendorDetailsSet('1000000240')" rel="self" 
title="VendorDetails"/>
<content type="application/xml">
<m:properties>
<d:Address m:type=" TEST.AddressDetails">
<d:HouseNumber/>
<d:Street1/>
<d:Street2/>
<d:City/>
<d:Region/>
<d:PostalCode/>
<d:Country/>
<d:HomePhone/>
<d:MobileNumber/>
<d:FaxNumber/>
<d:CompanyEmail/>
</d:Address>
<d:VendorNumber>1000000240</d:VendorNumber>
<d:VendorName>ABC COMPANY</d:VendorName>
</m:properties>
</content>
</entry>

在我可以 XML 解析它之前我需要对结果做些什么吗?或者是否有另一个 XML 标签我可以用来评估结果?

我仍在学习 XML 在 ColdFusion 环境中,所以任何帮助或建议来帮助我了解如何从 XML 获取数据都会很棒。

我也可以选择 return JSON 格式的结果,如果这样更容易的话。

  1. 转储变量以查看格式

  2. 如果值是一个数组,用arrayToList

  3. 转换成字符串

我发现我的问题是响应中包含多个组件我只需要将 XMLParse 更改为

<cfset FullResponse = XMLParse(request.getResponse.Filecontent)> 

解析了主要的 XML 部分。感谢所有在这方面帮助过我的人。