JQuery XML, проблема парсинга Coldfusion - PullRequest
1 голос
/ 16 декабря 2010

У меня проблемы с анализом следующего xml с использованием jQuery. XML получен из веб-сервиса ASP.net. Как проигнорировать первый блок со всей информацией о схеме и сузить набор результатов до нужных мне данных вниз.

   <?xml version="1.0" encoding="utf-8"?>

   // IGNORE THE FOLLOWING

   <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <soap:Body>
         <UsageResponse xmlns="http://portal.caps.compass.net.nz/portal/internet.asmx">
            <UsageResult>
               <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
                  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
                     <xs:complexType>
                        <xs:choice minOccurs="0" maxOccurs="unbounded">
                           <xs:element name="Table">
                              <xs:complexType>
                                 <xs:sequence>
                                    <xs:element name="startdate" type="xs:dateTime" minOccurs="0" />
                                    <xs:element name="Column1" type="xs:int" minOccurs="0" />
                                    <xs:element name="Column2" type="xs:string" minOccurs="0" />
                                    <xs:element name="Column3" type="xs:int" minOccurs="0" />
                                    ...<snip>...
                                </xs:sequence>
                              </xs:complexType>
                           </xs:element>
                        </xs:choice>               
                     </xs:complextype>
                  </xs:element>
               </xs:schema>


               // NARROW PARSING SCOPE TO THE FOLLOWING DATA ONLY

               <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
                  <NewDataSet xmlns="">
                     <Table diffgr:id="Table1" msdata:rowOrder="0">
                        <startdate>2010-01-31T00:00:00+13:00</startdate>
                        <Column1>1050</Column1>
                        <Column2>Date</Column2>
                        <Column3>0</Column3>
                        <Column4>1</Column4>
                        <Column5>yyyy-Mmm-dd</Column5>
                        <starttime>2010-01-31T00:00:00+13:00</starttime>
                        <Column6>800</Column6>
                        <Column7>Time</Column7>
                        <Column8>0</Column8>
                        <Column9>1</Column9>
                        <Column10>hh:mm:ss</Column10>
                        <subscribercode>dageorgetti</subscribercode>
                     </Table>

                     ...<snip>...

                     <Table1 diffgr:id="Table11" msdata:rowOrder="0">
                        <TotalCalls>0</TotalCalls>
                        <TotalDuration>2677129</TotalDuration>
                        <TotalCharge>0.0000</TotalCharge>
                        <TotalData>1368.9900</TotalData>
                     </Table1>
                  </NewDataSet>
               </diffgr:diffgram>

            </UsageResult>
         </UsageResponse>
      </soap:Body>
   </soap:Envelope>

Без использования jQuery я мог бы сузить свой набор результатов, используя что-то вроде следующего сценария coldfusion, благодаря некоторой помощи другого эксперта здесь:

dataContainer = rspContainer.xmlChildren[2].xmlChildren[1].xmlChildren;

Тогда я мог бы просто работать с подмножеством dataContainer. Но как мне сделать нечто подобное в jQuery?

1 Ответ

1 голос
/ 16 декабря 2010

Обидно, что поддержка E4X не сработала ( Поддержка ограничена в Firefox и практически отсутствует везде * ).

Если бы это работало везде, то вы могли бы просто сделать:

var returnedData = evaluate("some xml string");
var iCareAbout = returnedData.Envelope.Body.UsageResponse.UsageResult.diffgram;

Вместо этого jQuery проанализирует для вас XML:

var parsedXml = $(xmlString).find("diffgram");

Вот хорошее руководство по синтаксическому анализу XML с помощью jQuery .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...