jQuery XML,coldfusion 解析问题

发布于 2024-10-07 16:01:56 字数 3958 浏览 0 评论 0原文

我在使用 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 中做类似的事情呢?

I am having trouble parsing the following xml using jQuery. The xml is obtained from an ASP.net webservice. How do I ignore the first block with all the schema info and narrow down my result set to the data I need further down.

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

Without using jQuery, I could narrow down my result set using something like the following coldfusion script, thanks to some help by another expert here:

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

Then, I could just work with the dataContainer subset.
But, how do I do something similar in jQuery?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夕色琉璃 2024-10-14 16:01:56

遗憾的是 E4X 支持尚未普及(Firefox 中的支持有限,并且在其他地方基本上都缺失)。

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

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

取而代之的是,jQuery 将为您解析 XML:

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

这是一个很好的 使用 jQuery 解析 XML 的教程

It's a shame that E4X support hasn't taken off (Support is limited in Firefox, and basically missing everywhere else).

If it worked everywhere, then you could just do:

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

In lieu of that, jQuery will parse the XML for you:

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

Here is a good tutorial on parsing XML with jQuery.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文