2011-01-19 7 views
5

Ho un file XML in questo modo:È questo il modo più veloce per analizzare il mio XML in oggetti JavaScript usando jQuery?

<content> 
    <box> 
     <var1>A1</var1> 
     <var2>B1</var2> 
     <var3>C1</var3> 
     <var4>D1</var4> 
    </box> 
    <box> 
     <var1>A2</var1> 
     <var2>B2</var2> 
     <var3>C2</var3> 
     <var4>D2</var4> 
    </box> 
    <box> 
     <var1>A3</var1> 
     <var2>B3</var2> 
     <var3>C3</var3> 
     <var4>D3</var4> 
    </box> 
</content> 

Ha 500 box elementi che ho bisogno di analizzare in oggetti JavaScript. Sto usando questo codice che funziona bene, ma io sono un novizio e forse mi manca qualcosa e vorrei ottenere suggerimenti se c'è un/modo migliore più veloce per farlo:

var app = { 
    //... 
    box: [], 

    init: function (file) { 
     var that = this; 

     $.ajax({ 
      type: "GET", 
      url: file, 
      dataType: "xml", 
      success: function (xml) { 
       $("box", xml).each(function (i) { 
        var e = $(this); 
        that.box[i] = new Box(i, { 
         var1: e.children("var1").text(), 
         var2: e.children("var2").text(), 
         var3: e.children("var3").text(), 
         var4: e.children("var4").text() 
        }); 
       }); 
      } 
     }); 
    }, 
    //... 
}; 

Grazie in anticipo.

risposta

2

Utilizzare JSON se possibile. In questo modo il browser eseguirà l'analisi per te e non dovrai eseguire alcuna elaborazione successiva.

JSON dal server

{"content": 
    {"box": [ 
    {"var1": "A1", 
    "var2": "B1", 
    "var3": "C1", 
    "var4": "D1"}, 
    {"var1": "A2", 
    "var2": "B2", 
    "var3": "C2", 
    "var4": "D2"}, 
    {"var1": "A3", 
    "var2": "B3", 
    "var3": "C3", 
    "var4": "D3"}]}} 

client JavaScript

var app = { 
    //... 
    box: [], 

    init: function (file) { 
     var that = this; 

     $.ajax({ 
      type: "GET", 
      url: file, 
      dataType: "json", 
      success: function(result) { 
       that.box = $.map(result.content.box, function(box, i) { 
       return new Box(i, box); 
       }); 
      } 
     }); 
    }, 
    //... 
}; 
+0

Questo sembra grande, ma poi come potrei aggiungere metodi al prototipo degli oggetti creati scatola? – VerizonW

+0

È possibile utilizzare un ciclo for ... in loop per copiare tutte le proprietà da result.content.box in un oggetto con i metodi desiderati (è possibile farlo in una funzione di tipo "costruttore", se lo si desidera). Non è altrettanto elegante. In alternativa, è possibile assegnare tutti i metodi all'oggetto risultato JSON all'interno della funzione di successo. –

+0

In altre parole, in generale, non è possibile assegnare effettivamente agli oggetti box creati un prototipo speciale. Invece, devi tradurre gli oggetti "plain old data" che il parser JSON ti dà in qualche modo in versioni pienamente funzionali, o semplicemente li usa come sono in un codice più procedurale. –

3

Ho una sorgente XML sono costretto ad usare .. ho convertirlo in JSON sul lato client e quindi caricarlo .. molto più facile ..

Tracker.loadCasesFromServer = function() { 
$.ajax({ 
    type: 'GET', 
    url: '/WAITING.CASES.XML', 
    dataType: 'xml', 
    success: function (data) { 
      Tracker.cases = jQuery.parseJSON(xml2json(data, "")); 
      Tracker.loadCasesToMap(); 
     }, 
     data: {}, 
     async: true 
    }); 

};

usato il convertitore XML2JSON che può essere trovato qui: http://www.thomasfrank.se/xml_to_json.html

Duncan

+0

Grazie, ma penso che questo significhi fare un passo in più e non ci sarebbero guadagni in termini di prestazioni perché la funzione xml2json probabilmente sta facendo qualcosa di molto simile al mio metodo. Forse l'analisi dell'XML in JSON sul server sarebbe un'idea migliore ??? – VerizonW

+0

Sembra non funzionare correttamente: xml2json non è una funzione. – Yster

0

È possibile utilizzare il browser il supporto XML nativo, che immagino sarebbe veloce. Tuttavia questo è variato tra i browser, ad es. (Firefox: DOMParser, IE: XMLDOM ..).

Così, invece di andare e alla manipolazione manualmente tutti i browser, si potrebbe fare uso di qualcosa di simile https://sites.google.com/a/van-steenbeek.net/archive/explorer_domparser_parsefromstring

+0

In realtà sto già analizzando l'XML usando jQuery che penso sia molto più semplice dei metodi nativi di DOM JavaScript e gestisce le differenze tra browser. – VerizonW

+0

Beh non sono sicuro, ma penso che JQuery analizzi l'XML come normale HTML .. prova ad inserire qualcosa come

</plaintext>, in XML regolare questo è perfettamente ok, analizzarlo con jquery penserà che sia il deprecato HTML "plaintext", e il tuo la domanda riguarda le prestazioni, quindi usare il supporto nativo dovrebbe essere più veloce !! ma ancora una volta non si sa mai ... Si dovrebbe fare un punto di riferimento per una risposta accurata ... Cheerz – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> </div> <div class="clearfix"> </div> <div class="relative-box"> <div class="relative">Problemi correlati</div> <ul class="relative_list"> <li> 1. <a href="http://it.voidcc.com/question/p-xqbxxinf-e.html" target="_blank" title="Il modo più efficiente per analizzare Xml"> Il modo più efficiente per analizzare Xml </a> </li> <li> 2. <a href="http://it.voidcc.com/question/p-cjhthwge-z.html" target="_blank" title="È questo il modo più veloce per raggruppare in Panda?"> È questo il modo più veloce per raggruppare in Panda? </a> </li> <li> 3. <a href="http://it.voidcc.com/question/p-cxclwjlv-cb.html" target="_blank" title="Qual è il modo più semplice per convertire questo documento XML nel mio oggetto?"> Qual è il modo più semplice per convertire questo documento XML nel mio oggetto? </a> </li> <li> 4. <a href="http://it.voidcc.com/question/p-xdbnsigq-cd.html" target="_blank" title="Python - Qual è più veloce per analizzare Json o XML?"> Python - Qual è più veloce per analizzare Json o XML? </a> </li> <li> 5. <a href="http://it.voidcc.com/question/p-rxqmgsvk-y.html" target="_blank" title="Swift: il modo più veloce per analizzare HTML"> Swift: il modo più veloce per analizzare HTML </a> </li> <li> 6. <a href="http://it.voidcc.com/question/p-xyqnywbh-ba.html" target="_blank" title="Il modo più veloce ed efficiente per creare XML"> Il modo più veloce ed efficiente per creare XML </a> </li> <li> 7. <a href="http://it.voidcc.com/question/p-mkdjbzyd-m.html" target="_blank" title="Qual è il parser XML più veloce in PHP?"> Qual è il parser XML più veloce in PHP? </a> </li> <li> 8. <a href="http://it.voidcc.com/question/p-fokqyprm-b.html" target="_blank" title="Qual è il modo migliore per analizzare questo in C++?"> Qual è il modo migliore per analizzare questo in C++? </a> </li> <li> 9. <a href="http://it.voidcc.com/question/p-gxfbsmum-bq.html" target="_blank" title="Qual è il modo più veloce per analizzare una stringa JSON in una tabella SQLite?"> Qual è il modo più veloce per analizzare una stringa JSON in una tabella SQLite? </a> </li> <li> 10. <a href="http://it.voidcc.com/question/p-ngzddrhd-w.html" target="_blank" title="Il modo migliore per analizzare un valore int in Javascript"> Il modo migliore per analizzare un valore int in Javascript </a> </li> <li> 11. <a href="http://it.voidcc.com/question/p-vsdiyevs-be.html" target="_blank" title="Il modo più veloce per estrarre i frame usando ffmpeg?"> Il modo più veloce per estrarre i frame usando ffmpeg? </a> </li> <li> 12. <a href="http://it.voidcc.com/question/p-fuzauqyj-m.html" target="_blank" title="Come analizzare XML usando il parser SAX"> Come analizzare XML usando il parser SAX </a> </li> <li> 13. <a href="http://it.voidcc.com/question/p-tdtuavfh-e.html" target="_blank" title="Il modo più semplice per analizzare JSON in Qt 4.7"> Il modo più semplice per analizzare JSON in Qt 4.7 </a> </li> <li> 14. <a href="http://it.voidcc.com/question/p-xnuungzm-b.html" target="_blank" title="Disegno trama OpenGL veloce con oggetti buffer vertice. È questo il modo di farlo?"> Disegno trama OpenGL veloce con oggetti buffer vertice. È questo il modo di farlo? </a> </li> <li> 15. <a href="http://it.voidcc.com/question/p-vvoeixlw-r.html" target="_blank" title="qual è il modo migliore per analizzare la risposta xml in AJAX"> qual è il modo migliore per analizzare la risposta xml in AJAX </a> </li> <li> 16. <a href="http://it.voidcc.com/question/p-utefhvmm-bp.html" target="_blank" title="Qual è il modo più veloce per confrontare due oggetti in PHP?"> Qual è il modo più veloce per confrontare due oggetti in PHP? </a> </li> <li> 17. <a href="http://it.voidcc.com/question/p-gjzoblww-m.html" target="_blank" title="Qual è il modo più veloce per combinare due file xml in uno"> Qual è il modo più veloce per combinare due file xml in uno </a> </li> <li> 18. <a href="http://it.voidcc.com/question/p-ajiscofp-bm.html" target="_blank" title="modo più veloce per query XML in Java"> modo più veloce per query XML in Java </a> </li> <li> 19. <a href="http://it.voidcc.com/question/p-hdjwqhvz-x.html" target="_blank" title="Il modo più veloce per rendere il sito web reattivo?"> Il modo più veloce per rendere il sito web reattivo? </a> </li> <li> 20. <a href="http://it.voidcc.com/question/p-ooggmsjl-by.html" target="_blank" title="Come analizzare il dominio incrociato XML in jQuery?"> Come analizzare il dominio incrociato XML in jQuery? </a> </li> <li> 21. <a href="http://it.voidcc.com/question/p-ycturday-bx.html" target="_blank" title="modo più efficiente per analizzare questo linguaggio di scripting"> modo più efficiente per analizzare questo linguaggio di scripting </a> </li> <li> 22. <a href="http://it.voidcc.com/question/p-hnmnluon-p.html" target="_blank" title="PHP: il parser JSON o XML è più veloce?"> PHP: il parser JSON o XML è più veloce? </a> </li> <li> 23. <a href="http://it.voidcc.com/question/p-tfzfzauk-bu.html" target="_blank" title="Il modo più veloce per eliminare più oggetti sovrapposti in Hibernate"> Il modo più veloce per eliminare più oggetti sovrapposti in Hibernate </a> </li> <li> 24. <a href="http://it.voidcc.com/question/p-mqyumacm-z.html" target="_blank" title="Perché il mio string.indexof (char) è più veloce?"> Perché il mio string.indexof (char) è più veloce? </a> </li> <li> 25. <a href="http://it.voidcc.com/question/p-moaiuicp-a.html" target="_blank" title="Qual è il modo più semplice per mantenere oggetti java?"> Qual è il modo più semplice per mantenere oggetti java? </a> </li> <li> 26. <a href="http://it.voidcc.com/question/p-neoqpqvy-bo.html" target="_blank" title="Il modo più semplice per scrivere e leggere un XML"> Il modo più semplice per scrivere e leggere un XML </a> </li> <li> 27. <a href="http://it.voidcc.com/question/p-yybhjmdb-be.html" target="_blank" title="Qual è un parser più veloce per XML?"> Qual è un parser più veloce per XML? </a> </li> <li> 28. <a href="http://it.voidcc.com/question/p-hnepdviy-m.html" target="_blank" title="modo più semplice per analizzare una data in Javascript"> modo più semplice per analizzare una data in Javascript </a> </li> <li> 29. <a href="http://it.voidcc.com/question/p-avlxdnyk-g.html" target="_blank" title="Qual è il modo più semplice per analizzare JSON in Scala?"> Qual è il modo più semplice per analizzare JSON in Scala? </a> </li> <li> 30. <a href="http://it.voidcc.com/question/p-djehytfr-bh.html" target="_blank" title="Qual è il modo più efficiente per eseguire questo codice?"> Qual è il modo più efficiente per eseguire questo codice? </a> </li> </ul> </div> <div> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="3534119089"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img2.voidcc.com/voidso/script/side.js?t=1652515422436"></script> <script type="text/javascript" src="http://img2.voidcc.com/voidso/plugin/highlight/highlight.pack.js"></script> <link href="http://img2.voidcc.com/voidso/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row"> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- VOIDCC问答侧边栏广告 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="3862022848" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> Ultima domanda </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://it.voidcc.com/question/p-mvrebyth-bq.html" target="_blank" title="Sono necessari gli attributi di Noreturn sulle funzioni di chiusura?"> Sono necessari gli attributi di Noreturn sulle funzioni di chiusura? </a> </li> <li class="side_article_list_item"> 2. <a href="http://it.voidcc.com/question/p-qubptbmp-bh.html" target="_blank" title="stampante Android stampa araba usando zebra imz320 mostra come carattere invertito"> stampante Android stampa araba usando zebra imz320 mostra come carattere invertito </a> </li> <li class="side_article_list_item"> 3. <a href="http://it.voidcc.com/question/p-xbxvhkxh-bs.html" target="_blank" title="widgetPrimaryVibrancyEffect e widgetSecondaryVibrancyEffect"> widgetPrimaryVibrancyEffect e widgetSecondaryVibrancyEffect </a> </li> <li class="side_article_list_item"> 4. <a href="http://it.voidcc.com/question/p-cxtiqflb-bx.html" target="_blank" title="Algoritmo di tutti i filmati"> Algoritmo di tutti i filmati </a> </li> <li class="side_article_list_item"> 5. <a href="http://it.voidcc.com/question/p-uzwlecbu-bu.html" target="_blank" title="Android N: si tratta di mancanza di CONNECTIVITY_CHANGE"> Android N: si tratta di mancanza di CONNECTIVITY_CHANGE </a> </li> <li class="side_article_list_item"> 6. <a href="http://it.voidcc.com/question/p-hxfaixez-bq.html" target="_blank" title="Trova la posizione in cui è archiviato l'handle nell'oggetto"> Trova la posizione in cui è archiviato l'handle nell'oggetto </a> </li> <li class="side_article_list_item"> 7. <a href="http://it.voidcc.com/question/p-nauebxhn-bb.html" target="_blank" title="dattiloscritto init: Errore TS6053: File 'init.ts' non trovato"> dattiloscritto init: Errore TS6053: File 'init.ts' non trovato </a> </li> <li class="side_article_list_item"> 8. <a href="http://it.voidcc.com/question/p-rcqyhjuv-bn.html" target="_blank" title="IOS come troncare con ellissi l'ultima linea visibile di un paragrafo?"> IOS come troncare con ellissi l'ultima linea visibile di un paragrafo? </a> </li> <li class="side_article_list_item"> 9. <a href="http://it.voidcc.com/question/p-eckyveyt-t.html" target="_blank" title="Durata fotogrammi personalizzata per Gif animate in Python ImageIO"> Durata fotogrammi personalizzata per Gif animate in Python ImageIO </a> </li> <li class="side_article_list_item"> 10. <a href="http://it.voidcc.com/question/p-cuqryedx-bx.html" target="_blank" title="Python: nome classe PEP 8 come variabile"> Python: nome classe PEP 8 come variabile </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i>&nbsp;Problemi correlati</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://it.voidcc.com/question/p-xqbxxinf-e.html" target="_blank" title="Il modo più efficiente per analizzare Xml"> Il modo più efficiente per analizzare Xml </a> </li> <li class="side_article_list_item"> 2. <a href="http://it.voidcc.com/question/p-cjhthwge-z.html" target="_blank" title="È questo il modo più veloce per raggruppare in Panda?"> È questo il modo più veloce per raggruppare in Panda? </a> </li> <li class="side_article_list_item"> 3. <a href="http://it.voidcc.com/question/p-cxclwjlv-cb.html" target="_blank" title="Qual è il modo più semplice per convertire questo documento XML nel mio oggetto?"> Qual è il modo più semplice per convertire questo documento XML nel mio oggetto? </a> </li> <li class="side_article_list_item"> 4. <a href="http://it.voidcc.com/question/p-xdbnsigq-cd.html" target="_blank" title="Python - Qual è più veloce per analizzare Json o XML?"> Python - Qual è più veloce per analizzare Json o XML? </a> </li> <li class="side_article_list_item"> 5. <a href="http://it.voidcc.com/question/p-rxqmgsvk-y.html" target="_blank" title="Swift: il modo più veloce per analizzare HTML"> Swift: il modo più veloce per analizzare HTML </a> </li> <li class="side_article_list_item"> 6. <a href="http://it.voidcc.com/question/p-xyqnywbh-ba.html" target="_blank" title="Il modo più veloce ed efficiente per creare XML"> Il modo più veloce ed efficiente per creare XML </a> </li> <li class="side_article_list_item"> 7. <a href="http://it.voidcc.com/question/p-mkdjbzyd-m.html" target="_blank" title="Qual è il parser XML più veloce in PHP?"> Qual è il parser XML più veloce in PHP? </a> </li> <li class="side_article_list_item"> 8. <a href="http://it.voidcc.com/question/p-fokqyprm-b.html" target="_blank" title="Qual è il modo migliore per analizzare questo in C++?"> Qual è il modo migliore per analizzare questo in C++? </a> </li> <li class="side_article_list_item"> 9. <a href="http://it.voidcc.com/question/p-gxfbsmum-bq.html" target="_blank" title="Qual è il modo più veloce per analizzare una stringa JSON in una tabella SQLite?"> Qual è il modo più veloce per analizzare una stringa JSON in una tabella SQLite? </a> </li> <li class="side_article_list_item"> 10. <a href="http://it.voidcc.com/question/p-ngzddrhd-w.html" target="_blank" title="Il modo migliore per analizzare un valore int in Javascript"> Il modo migliore per analizzare un valore int in Javascript </a> </li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://it.voidcc.com/contact">Contattaci</a></li> <li>© 2020 IT.VOIDCC.COM</li> <li><a rel="nofollow" href="https://beian.miit.gov.cn/" target="_blank">沪ICP备13005482号-13</a></li> <li><script type="text/javascript" src="https://s9.cnzz.com/z_stat.php?id=1280098168&web_id=1280098168"></script></li> <li><a href="http://cn.voidcc.com/" target="_blank" title="程序问答园区">简体中文</a></li> <li><a href="http://hk.voidcc.com/" target="_blank" title="程序問答園區">繁體中文</a></li> <li><a href="http://ru.voidcc.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.voidcc.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.voidcc.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.voidcc.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.voidcc.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.voidcc.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.voidcc.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.voidcc.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.voidcc.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.voidcc.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.voidcc.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-77509369-5"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'UA-77509369-5'); </script> <script> var _hmt = _hmt || []; (function () { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?67d4731349f0b00136755b80364ce381"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>