Сборка XML из ColdFusion - PullRequest
       1

Сборка XML из ColdFusion

3 голосов
/ 08 ноября 2010

Я создаю XML в ColdFusion для отправки данных в QuickBooks. Я могу построить свою переменную с моими данными из <cfoutput> штрафа. Как это:

<cfoutput query="get">

<cfset #x# =
'    
<InvoiceAddRq>
<InvoiceAdd>

    <CustomerRef>

        <ListID>XXXXX</ListID>          

    </CustomerRef>

    <ClassRef>

        <ListID>XXXXX</ListID>

    </ClassRef>

    <TxnDate>2010-11-04</TxnDate>


                <InvoiceLineAdd>

                    <ItemRef>
                        <ListID>XXXXX</ListID>
                    </ItemRef>

                    <Desc>XXXXX</Desc>
                    <Quantity>XXXXX</Quantity>
                    <Rate>XXXXX</Rate>          

                </InvoiceLineAdd>



</InvoiceAdd>

</InvoiceAddRq>
'
>

Но мне нужно создать XML, в котором я перебираю детали позиции с <cfloop> внутри <cfset>. Вот что я пытаюсь сделать:

<cfoutput query="get">

<cfset #x# =
'    
<InvoiceAddRq>
<InvoiceAdd>

    <CustomerRef>

        <ListID>XXXXX</ListID>          

    </CustomerRef>

    <ClassRef>

        <ListID>XXXXX</ListID>

    </ClassRef>

    <TxnDate>2010-11-04</TxnDate>

        <cfquery name="getDetails">

        </cfquery>

            <cfloop query="getDetails">

            <InvoiceLineAdd>

                <ItemRef>
                    <ListID>XXXXX</ListID>
                </ItemRef>

                <Desc>XXXXX</Desc>
                <Quantity>XXXXX</Quantity>
                <Rate>XXXXX</Rate>          

            </InvoiceLineAdd>

        </cfloop>           

</InvoiceAdd>

</InvoiceAddRq>
'
>

Это, очевидно, не работает правильно, потому что он видит атрибуты и как XML. Я пытаюсь выяснить, как написать какой-нибудь XML, затем выполнить мой запрос и цикл, чтобы получить детализацию позиции, а затем вернуться к XML. Я поставлен в тупик, как это сделать. Я надеюсь, что это имеет смысл, и любая помощь будет принята с благодарностью.

Ответы [ 3 ]

7 голосов
/ 08 ноября 2010

Вы можете попробовать <cfxml> или <cfsavecontent> для построения XML-строки.

cfxml :

<cfxml variable="your_xml_var" caseSensitive="yes">
  <InvoiceAddRq>
    <Anothertag>
    </Anothertag>
    <cfloop query="your_query">
      <Somedata foo="#your_query.bar#">
      #your_query.blah#
      </Somedata>
    </cfloop>
  </InvoiceAddRq>
</cfxml>

cfsavecontent :

<cfsavecontent variable="your_xml_var">
  <InvoiceAddRq>
    <cfloop query="your_query">
      <Anothertag />
    </cfloop>
  </InvoiceAddRq>
</cfsavecontent>
1 голос
/ 08 ноября 2010

Попробуйте обернуть ваше XML-здание в cfoutput и cfsavecontent. Если вы находитесь в файле .cfm или .cfc, не следует думать, что cfquery или cfloop (или любой тег cf ~) на самом деле является частью xml, что будет удален во время выполнения страницы.

0 голосов
/ 24 мая 2011

В зависимости от версии CF, которую вы используете, вы можете «свернуть свой» ответ и просто сгенерировать строку XML вручную. Если вы хотите вывести XML на экран, обязательно выполните сброс, чтобы не отправлять на экран ничего, кроме необработанного XML. Кроме того, убедитесь, что отладка CF отключена при просмотре в браузере, иначе вывод не будет отображаться должным образом.

<cfsilent>
<cfset retVal = "">
<cfquery name="get">
      DO SOMETHING HERE
</cfquery>
<cfloop query="get">
   <cfset retVal &= "<InvoiceAddRq><InvoiceAdd><CustomerRef><ListID>XXXXX</ListID></CustomerRef>">
   <cfset retVal &= "<ClassRef><ListID>XXXXX</ListID></ClassRef><TxnDate>2010-11-04</TxnDate>">
   <cfquery name="getDetails">
      DO SOMETHING HERE
   </cfquery>
   <cfloop query="getDetails">
      <cfset retVal &= "<InvoiceLineAdd><ItemRef><ListID>XXXXX</ListID></ItemRef>">
      <cfset retVal &= "<Desc>XXXXX</Desc><Quantity>XXXXX</Quantity><Rate>XXXXX</Rate></InvoiceLineAdd>">
   </cfloop>           
   <cfset retVal &= "</InvoiceAdd></InvoiceAddRq>">
</cfloop>
</cfsilent>
<cfcontent reset="yes">#retVal#</cfcontent>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...