2010-12-15 4 views
1

Ich habe Probleme beim Parsing der folgenden XML mit jQuery. Das XML wird von einem ASP.net-Webdienst abgerufen. Wie ignoriere ich den ersten Block mit allen Schema-Informationen und beschränke meine Ergebnismenge auf die Daten, die ich weiter unten brauche.jQuery XML, Coldfusion Parsing Problem

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

Ohne jQuery zu verwenden, konnte ich meine Ergebnismenge mit so etwas wie der folgenden Coldfusion-Skript, dank einengen zu etwas Hilfe von einem anderen Experten hier:

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

Dann konnte ich mit der Arbeit einfach dataContainer-Untermenge Aber, wie mache ich etwas ähnliches in jQuery?

+0

Zeigen Sie uns den jQuery-Code, den Sie jetzt haben. –

+0

Etwas wie 'var newXML = $ (rspContainer) .filter ('[id = NewDataSet]'). Remove()'? – Fred

Antwort

1

Es ist eine Schande, dass die E4X-Unterstützung nicht abgenommen hat (Support is limited in Firefox, and basically missing everywhere else).

Wenn es überall gearbeitet, dann könnte man einfach tun:

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

Anstatt dass wird jQuery das XML für Sie analysieren:

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

Hier ist ein guter tutorial on parsing XML with jQuery.