jQuery XML,coldfusion解析问题

时间:2010-12-15 22:45:50

标签: jquery xml coldfusion

我无法使用jQuery解析以下xml。 xml是从ASP.net Web服务获得的。如何忽略包含所有架构信息的第一个块,并将结果集缩小到我需要的数据范围。

   <?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 个答案:

答案 0 :(得分:1)

令人遗憾的是,E4X支持尚未起飞(Support is limited in Firefox, and basically missing everywhere else)。

如果它在任何地方都有效,那么你可以这样做:

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

除此之外,jQuery将为您解析XML:

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

这是一个很好的tutorial on parsing XML with jQuery