Разбор XML .net в Coldfusion веб-службы - PullRequest
0 голосов
/ 18 апреля 2011

Я почти там с этим проектом.Учитывая приведенный ниже 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>dave.getti@cpass.net.nz</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 Ответ

0 голосов
/ 18 апреля 2011

Я думаю, что вы пытаетесь ссылаться на эти отдельные узлы, используя абсолютную ссылку вместо простой локальной ссылки, которую вы получаете, используя 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>

Вот некоторые great ссылается на синтаксический анализ XML в Coldfusion.

ВНИМАНИЕ: код не проверен, только на основании того, что вы представили, и того, как coldfusion анализирует документы XML.

...