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>

次の方法で contactID にアクセスできます。

<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>

2 番目の住所が私書箱の住所であると仮定すると、この XML を作成した人が意図したものと正確に一致しない可能性があるため、誤った仮定をしている可能性があることに注意してください。aAddressesまた、実行時のエラーを回避するために、配列の長さを実際に確認する必要があります。うまくいけば、これでうまくいくでしょう。

于 2012-06-14T15:59:15.263 に答える