2011-04-18 108 views
0

我幾乎在這個項目。考慮下面的XML:.net到Coldfusion的Web服務XML解析

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
    <debtor xmlns="http://tempuri.org/Database.xsd"> 
     <Customer diffgr:id="Customer1" msdata:rowOrder="0" diffgr:hasErrors="true"> 
     <SeqNo>-1</SeqNo> 
     <AccGroup>1</AccGroup> 
     <AccountTypeID>1</AccountTypeID> 
     <CompaniesOfficeID>-4</CompaniesOfficeID> 
     <DOB /> 
     <SignupDate>18/04/2007</SignupDate> 
     <DeferredDate /> 
     <TeleSalesNo>5</TeleSalesNo> 
     <PIN>4433</PIN> 
     <Name>MR DAVID GETTI</Name> 
     <Salutation>MR</Salutation> 
     <FirstName>DAVID</FirstName> 
     <LastName>GETTI</LastName> 
     <Phone>64 7 555 522</Phone> 
     <Fax /> 
     <CellPhone>64 25 999 999</CellPhone> 
     <Email>[email protected]</Email> 
     <AfterHrs_Contact /> 
     <SalesNo>0</SalesNo> 
     <CreditStatus>1</CreditStatus> 
     <RefGroupNo>0</RefGroupNo> 
     <PriceNo>-1</PriceNo> 
     <SmartLineProvider>-1</SmartLineProvider> 
     <Contact>DAVID GETTI</Contact> 
     <CustomerCode>1111111</CustomerCode> 
     <HasCellPhone>false</HasCellPhone> 
     <InvoiceOptions>12</InvoiceOptions> 
     <TradingAs>MR DAVID GETTI</TradingAs> 
     <FranchiseCode>-1</FranchiseCode> 
     <Existing>true</Existing> 
     <Address diffgr:id="Address1" msdata:rowOrder="0"> 
      <SeqNo>-1</SeqNo> 
      <CustomerSeqNo>-1</CustomerSeqNo> 
      <Show>30</Show> 
      <TypeSelected>2</TypeSelected> 
      <Name>PostalAddress</Name> 
      <AddressNumber /> 
      <Address1>88 Blue Lane East</Address1> 
      <Address2>REMA</Address2> 
      <Address3>AKL</Address3> 
      <Address4 /> 
      <PostCode>1050</PostCode> 
      <LocationCode>0</LocationCode> 
      <AgentID>0</AgentID> 
     </Address> 
     <Address diffgr:id="Address2" msdata:rowOrder="1"> 
      <SeqNo>-2</SeqNo> 
      <CustomerSeqNo>-1</CustomerSeqNo> 
      <Show>10</Show> 
      <TypeSelected>2</TypeSelected> 
      <Name>PhysicalAddress</Name> 
      <AddressNumber /> 
      <Address1>44 OHINA STREET</Address1> 
      <Address2>REMA</Address2> 
      <Address3>AKL</Address3> 
      <Address4 /> 
      <PostCode>1098</PostCode> 
      <LocationCode>1</LocationCode> 
      <AgentID>1</AgentID> 
     </Address> 

我可以訪問所有的數據,除詳細地址並填充一個查詢對象,使用下面的代碼:

<cfset Local.xRows = Local.xData["diffgr:diffgram"]["debtor"] /> 
<cfloop from="1" to="#arrayLen(Local.xRows.xmlChildren)#" index="Local.i"> 
    <cfset Local.thisRow = Local.xRows.xmlChildren[Local.i] /> 
    <cfset Local.tableName = Local.thisRow.xmlName /> 
    <cfset queryAddRow(Local.result[Local.tableName], 1) /> 

    <cfloop from="1" to="#arrayLen(Local.thisRow.xmlChildren)#" index="Local.j"> 
     <cfif listfindnocase(vCols,Local.thisRow.xmlChildren[Local.j].xmlName)> 
      <cfset querySetCell(Local.result[Local.tableName], Local.thisRow.xmlChildren[Local.j].xmlName, Local.thisRow.xmlChildren[Local.j].xmlText, Local.result[Local.tableName].recordCount) /> 
     </cfif> 
    </cfloop> 
</cfloop> 

但是,我堅持瞭如何訪問主地址節點下的各個地址細節節點:

<Address diffgr:id="Address1" msdata:rowOrder="0"> 

任何幫助將不勝感激。

+1

我希望你真的沒有把Getti先生的電子郵件,電話號碼和家庭住址給全世界。 – ale 2011-04-18 15:46:09

+0

是的,我搞砸了一切從名字到地址。他永遠不會被識別! – user460114 2011-04-18 21:20:33

回答

0

我想你正在嘗試引用那些使用絕對引用的單個節點,而不是通過使用cfloop獲得的更簡單的本地引用。

<cfset xmlCustomerInfo = xmlDoc.info[ "Customer" ][ Local.i ] /> 
<cfset arrAddressList = xmlCustomerInfo[ "Address" ] /> 

<cfloop 
    index="Local.j" 
    from="1" 
    to="#ArrayLen(arrAddressList)#" 
    step="1"> 

    <cfset innerAddressNode = arrAddressList[ Local.j ] /> 

</cfloop> 

這裏有一些greatreferences到ColdFusion的XML解析。

警告:代碼未經測試,僅基於您提供的內容以及Coldfusion如何分析Xml文檔。

+0

感謝Dominic,我最終以此爲起點。 – user460114 2011-04-18 21:19:22

+0

很高興幫助!隨意發佈您所做的事情,以便我們作爲社區可以從中學習。謝謝! – 2011-04-18 23:03:25