0

给定以下 XML:

<Contact>
   <ContactID>41111-f15a-4fa1-b643-47877608f557</ContactID>
   <ContactStatus>ACTIVE</ContactStatus>
   <Name>ABC Ltd</Name>
   <EmailAddress>xxx@xxx.co</EmailAddress>
   <SkypeUserName>xxxdemo</SkypeUserName>
   <Addresses>
      <Address>
         <AddressType>STREET</AddressType>
         <AddressLine1>Radio XXX</AddressLine1>
         <AddressLine2>4388 Ballarat Highway</AddressLine2>
         <City>Melbourne</City>
         <PostalCode>3133</PostalCode>
      </Address>
      <Address>
         <AddressType>POBOX</AddressType>
         <AddressLine1>Radio xx House</AddressLine1>
         <AddressLine2>P O Box 1111</AddressLine2>
         <City>Melbourne</City>
         <Region>VIC</Region>
         <PostalCode>3133</PostalCode>
      </Address>
   </Addresses>
   <Phones>
      <Phone>
         <PhoneType>MOBILE</PhoneType>
      </Phone>
      <Phone>
         <PhoneType>DEFAULT</PhoneType>
         <PhoneNumber>1112222</PhoneNumber>
         <PhoneAreaCode>03</PhoneAreaCode>
      </Phone>
      <Phone>
         <PhoneType>FAX</PhoneType>
      </Phone>
      <Phone>
         <PhoneType>DDI</PhoneType>
      </Phone>
   </Phones>
   <UpdatedDateUTC>2012-07-26T20:06:00.75</UpdatedDateUTC>
   <IsSupplier>false</IsSupplier>
   <IsCustomer>true</IsCustomer>
</Contact>
<Contact>
   Another contact...
</Contact>

我可以通过以下方式访问联系人 ID:

<cfset aContacts = XmlSearch(sResponse,"//Contact") />
<cfloop index="i" from="1" to="#arrayLen(aContacts)#">
  <cfset sContactID = aContacts[i].ContactID>
</cfloop>

但是我如何解析各种地址类型,例如如下:

<cfloop index="i" from="1" to="#arrayLen(aContacts)#">
  <cfset sContactID = aContacts[i].ContactID>
  <cfset sStreetAddressLine1 = ??>
  <cfset sStreetAddressLine2 = ??>
  <cfset sStreetAddressCity = ??>
  <cfset sStreetAddressPostalCode = ??>
  <cfset sPOBoxAddressLine1 = ??>
  <cfset sPOBoxAddressLine2 = ??>
  <cfset sPOBoxAddressCity = ??>
  <cfset sPOBoxAddressPostalCode = ??>
</cfloop>
4

1 回答 1

2

这应该这样做: -

<cfset aContacts = XmlSearch(sResponse,"//Contact")>

<cfloop index="i" from="1" to="#arrayLen(aContacts)#">
    <cfset sContactID = aContacts[i].ContactID>
    <cfset aAddresses = aContacts[i].addresses.xmlChildren>
    <cfset sStreetAddressLine1 = aAddresses[1].AddressLine1>
    <cfset sStreetAddressLine2 = aAddresses[1].AddressLine2>
    <cfset sStreetAddressCity = aAddresses[1].City>
    <cfset sStreetAddressPostalCode = aAddresses[1].PostalCode>
    <cfset sPOBoxAddressLine1 = aAddresses[2].AddressLine1>
    <cfset sPOBoxAddressLine2 = aAddresses[2].AddressLine2>
    <cfset sPOBoxAddressCity = aAddresses[2].City>
    <cfset sPOBoxAddressPostalCode = aAddresses[2].PostalCode>
</cfloop>

请记住,假设第二个地址是邮政信箱地址可能与创建此 XML 的人的意图不完全一致,因此您可能在那里做出了一些不正确的假设。此外,您应该真正检查数组的长度aAddresses以避免任何运行时错误。希望这会让你继续前进。

于 2012-06-14T15:59:15.263 回答