2011-01-19 17 views
5

que tienen un archivo XML como esto:¿Es esta la manera más rápida de analizar mi XML en objetos 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> 

Tiene 500 box elementos que tengo que analizar en objetos de JavaScript. Estoy utilizando el código que funciona bien, pero yo soy un novato y tal vez me estoy perdiendo algo y me gustaría obtener sugerencias si hay una manera mejor/más rápido que hacerlo:

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() 
        }); 
       }); 
      } 
     }); 
    }, 
    //... 
}; 

Gracias de antemano.

Respuesta

2

Uso JSON si es posible. De esa forma, el navegador hará el análisis por usted y no tendrá que hacer ningún procesamiento posterior.

JSON desde el servidor

{"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"}]}} 

cliente 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

Esto se ve muy bien, pero entonces, ¿cómo podría yo añadir métodos para el prototipo de los objetos creados caja? – VerizonW

+0

Puede usar un bucle for ... in para copiar todas las propiedades de result.content.box en un objeto con los métodos que desee (puede hacerlo en una función de tipo 'constructor' si lo desea). No es tan elegante. Alternativamente, puede asignar todos los métodos al objeto de resultado JSON usted mismo dentro de la función de éxito. –

+0

En otras palabras, en general, no se puede dar a los objetos del cuadro creado un prototipo especial. En su lugar, debe traducir de algún modo los objetos de "datos antiguos simples" que el analizador JSON le ofrece en versiones completamente funcionales, o simplemente usarlos de la forma en que se presentan en un código de estilo más procedimental. –

3

tengo una fuente XML estoy obligado a usar .. Me convertirlo a JSON en el lado del cliente y luego cárgalo ... mucho más fácil ...

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 
    }); 

};

utilizado el convertidor de XML2JSON que se pueden encontrar aquí: http://www.thomasfrank.se/xml_to_json.html

Duncan

+0

Gracias, pero creo que esto significa hacer un paso adicional y no habrá ganancias de rendimiento porque la función xml2json probablemente esté haciendo algo muy similar a mi método. Tal vez el análisis del XML en JSON en el servidor sería una mejor idea ??? – VerizonW

+0

Parece que no funciona: xml2json no es una función. – Yster

0

Puede utilizar el soporte XML nativo del navegador que supongo que sería rápido. Sin embargo, esto varía entre los navegadores, por ejemplo (Firefox: DOMParser, IE: XMLDOM ..).

Así que en lugar de simplemente pasando y la manipulación manual de todos los navegadores, se puede hacer uso de algo como esto https://sites.google.com/a/van-steenbeek.net/archive/explorer_domparser_parsefromstring

+0

En realidad, ya estoy analizando el XML usando jQuery, que creo que es mucho más fácil que los métodos DOM nativos de JavaScript y maneja las diferencias del navegador. – VerizonW

+0

Bueno, no estoy seguro, pero creo que JQuery analiza XML como HTML normal ... intente insertar algo como

</plaintext>, en XML normal esto está perfectamente bien, analízalo con jquery, pensará que es el texto plano HTML en desuso y tu la pregunta es sobre el rendimiento, ¡así que se supone que usar el soporte nativo es más rápido! pero una vez más nunca se sabe ... Usted debe comparar para obtener una respuesta precisa ... 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">Cuestiones relacionadas</div> <ul class="relative_list"> <li> 1. <a href="http://es.uwenku.com/question/p-pfwrhzkr-bq.html" target="_blank" title="La forma más rápida de analizar cadenas json (sin jquery)"> La forma más rápida de analizar cadenas json (sin jquery) </a> </li> <li> 2. <a href="http://es.uwenku.com/question/p-cbpcsbvq-q.html" target="_blank" title="¿Cuál es la forma más rápida de analizar grandes documentos XML en Python?"> ¿Cuál es la forma más rápida de analizar grandes documentos XML en Python? </a> </li> <li> 3. <a href="http://es.uwenku.com/question/p-klmsoxzv-k.html" target="_blank" title="¿Por qué es más rápida esta expresión regular?"> ¿Por qué es más rápida esta expresión regular? </a> </li> <li> 4. <a href="http://es.uwenku.com/question/p-mnlrjzyf-bc.html" target="_blank" title="¿Es esta la manera más óptima? C bitfields"> ¿Es esta la manera más óptima? C bitfields </a> </li> <li> 5. <a href="http://es.uwenku.com/question/p-xsjwrhpa-d.html" target="_blank" title="Dibujo de textura rápida OpenGL con objetos de búfer de vértice. ¿Es esta la manera de hacerlo?"> Dibujo de textura rápida OpenGL con objetos de búfer de vértice. ¿Es esta la manera de hacerlo? </a> </li> <li> 6. <a href="http://es.uwenku.com/question/p-hqhvoaix-y.html" target="_blank" title="Django: Analizar JSON en mi plantilla usando Javascript"> Django: Analizar JSON en mi plantilla usando Javascript </a> </li> <li> 7. <a href="http://es.uwenku.com/question/p-yprviumz-bw.html" target="_blank" title="¿cuál es la mejor manera de analizar la respuesta XML en AJAX"> ¿cuál es la mejor manera de analizar la respuesta XML en AJAX </a> </li> <li> 8. <a href="http://es.uwenku.com/question/p-tzcjuhbf-a.html" target="_blank" title="Cómo analizar XML utilizando jQuery?"> Cómo analizar XML utilizando jQuery? </a> </li> <li> 9. <a href="http://es.uwenku.com/question/p-bxjbhwcc-bw.html" target="_blank" title="Diferencia en objetos JSON usando Javascript/JQuery"> Diferencia en objetos JSON usando Javascript/JQuery </a> </li> <li> 10. <a href="http://es.uwenku.com/question/p-gdqfgivp-v.html" target="_blank" title="hipotenusa más rápida en javascript?"> hipotenusa más rápida en javascript? </a> </li> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-6208739752673518" data-ad-slot="4606349252"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <li> 11. <a href="http://es.uwenku.com/question/p-noelayom-bq.html" target="_blank" title="Cómo analizar XML entre dominios en jQuery?"> Cómo analizar XML entre dominios en jQuery? </a> </li> <li> 12. <a href="http://es.uwenku.com/question/p-nppipxym-bq.html" target="_blank" title="La manera más elegante de consultar cadenas XML usando XPath"> La manera más elegante de consultar cadenas XML usando XPath </a> </li> <li> 13. <a href="http://es.uwenku.com/question/p-wotwrjje-s.html" target="_blank" title="¿Existe alguna manera más rápida de verificar si esta es una fecha válida?"> ¿Existe alguna manera más rápida de verificar si esta es una fecha válida? </a> </li> <li> 14. <a href="http://es.uwenku.com/question/p-pecgrlaf-bt.html" target="_blank" title="¿La llamada rápida es realmente más rápida?"> ¿La llamada rápida es realmente más rápida? </a> </li> <li> 15. <a href="http://es.uwenku.com/question/p-alclctqo-bw.html" target="_blank" title="Python - ¿Qué es más rápido para analizar Json o XML?"> Python - ¿Qué es más rápido para analizar Json o XML? </a> </li> <li> 16. <a href="http://es.uwenku.com/question/p-gljfmdcm-ba.html" target="_blank" title="¿Existe alguna forma rápida de convertir objetos Java xml en objetos Scala xml?"> ¿Existe alguna forma rápida de convertir objetos Java xml en objetos Scala xml? </a> </li> <li> 17. <a href="http://es.uwenku.com/question/p-axnmmmae-ba.html" target="_blank" title="¿Cuál es la mejor manera de serializar objetos JavaScript a XML?"> ¿Cuál es la mejor manera de serializar objetos JavaScript a XML? </a> </li> <li> 18. <a href="http://es.uwenku.com/question/p-zwktaxhk-h.html" target="_blank" title="¿Existe alguna forma declarativa de analizar objetos XML a Java?"> ¿Existe alguna forma declarativa de analizar objetos XML a Java? </a> </li> <li> 19. <a href="http://es.uwenku.com/question/p-vknmnkqh-bc.html" target="_blank" title="¿Cuál es la forma más rápida de analizar una cadena JSON en una tabla SQLite?"> ¿Cuál es la forma más rápida de analizar una cadena JSON en una tabla SQLite? </a> </li> <li> 20. <a href="http://es.uwenku.com/question/p-pavggguu-r.html" target="_blank" title="manera más fácil de analizar JSON en Qt 4.7"> manera más fácil de analizar JSON en Qt 4.7 </a> </li> <li> 21. <a href="http://es.uwenku.com/question/p-mjtxssju-bh.html" target="_blank" title="Cómo analizar atributos xml con jQuery solo?"> Cómo analizar atributos xml con jQuery solo? </a> </li> <li> 22. <a href="http://es.uwenku.com/question/p-ynivmlyw-bo.html" target="_blank" title="analizar la respuesta xml con jQuery"> analizar la respuesta xml con jQuery </a> </li> <li> 23. <a href="http://es.uwenku.com/question/p-qogaqfus-r.html" target="_blank" title="¿La mejor manera de analizar esta cadena en particular usando awk/sed?"> ¿La mejor manera de analizar esta cadena en particular usando awk/sed? </a> </li> <li> 24. <a href="http://es.uwenku.com/question/p-vwxytljq-c.html" target="_blank" title="¿Cuál es la manera más rápida de determinar si existe una fila usando Linq a SQL?"> ¿Cuál es la manera más rápida de determinar si existe una fila usando Linq a SQL? </a> </li> <li> 25. <a href="http://es.uwenku.com/question/p-yeifawmu-o.html" target="_blank" title="La forma más rápida y eficiente de crear XML"> La forma más rápida y eficiente de crear XML </a> </li> <li> 26. <a href="http://es.uwenku.com/question/p-bbdyiexv-bg.html" target="_blank" title="jquery: inserción DOM más rápida?"> jquery: inserción DOM más rápida? </a> </li> <li> 27. <a href="http://es.uwenku.com/question/p-kuyvqqni-z.html" target="_blank" title="La manera más fácil de escribir y leer un XML"> La manera más fácil de escribir y leer un XML </a> </li> <li> 28. <a href="http://es.uwenku.com/question/p-hojzjnmj-a.html" target="_blank" title="¿Por qué mi aplicación C++ es más rápida que mi aplicación C (usando la misma biblioteca) en un Core i7"> ¿Por qué mi aplicación C++ es más rápida que mi aplicación C (usando la misma biblioteca) en un Core i7 </a> </li> <li> 29. <a href="http://es.uwenku.com/question/p-bxgpqwqj-z.html" target="_blank" title="La forma más rápida/mejor de leer XML"> La forma más rápida/mejor de leer XML </a> </li> <li> 30. <a href="http://es.uwenku.com/question/p-uhiokjdr-d.html" target="_blank" title="exponenciación modular más rápida en JavaScript"> exponenciación modular más rápida en JavaScript </a> </li> </ul> </div> <div> <script async src="https://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="1575177025"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img.uwenku.com/uwenku/script/side.js?t=1644592048471"></script> <script type="text/javascript" src="http://img.uwenku.com/uwenku/plugin/highlight/highlight.pack.js"></script> <link href="http://img.uwenku.com/uwenku/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="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="5415218910" 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"> Última pregunta </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://es.uwenku.com/question/p-syirngfi-bq.html" target="_blank" title="NodeJS escribe el búfer binario en un archivo"> NodeJS escribe el búfer binario en un archivo </a> </li> <li class="side_article_list_item"> 2. <a href="http://es.uwenku.com/question/p-ggcccezm-bx.html" target="_blank" title="Node.js + expreso Gotas aleatoriamente solicitudes, lo que resulta en una edición de Pasarela interrumpida"> Node.js + expreso Gotas aleatoriamente solicitudes, lo que resulta en una edición de Pasarela interrumpida </a> </li> <li class="side_article_list_item"> 3. <a href="http://es.uwenku.com/question/p-tbntswdo-bm.html" target="_blank" title="no puede cargar dicho archivo - rubí WMI (LoadError) y no se puede cargar dicho archivo - Win32/servicio (LoadError)"> no puede cargar dicho archivo - rubí WMI (LoadError) y no se puede cargar dicho archivo - Win32/servicio (LoadError) </a> </li> <li class="side_article_list_item"> 4. <a href="http://es.uwenku.com/question/p-wzcjtddd-br.html" target="_blank" title="Usando `git show` para crear y aplicar parches que abarcan múltiples commits"> Usando `git show` para crear y aplicar parches que abarcan múltiples commits </a> </li> <li class="side_article_list_item"> 5. <a href="http://es.uwenku.com/question/p-foxhoqlx-bs.html" target="_blank" title="¿Podemos usar expresiones regulares en el control de acceso de Symfony2?"> ¿Podemos usar expresiones regulares en el control de acceso de Symfony2? </a> </li> <li class="side_article_list_item"> 6. <a href="http://es.uwenku.com/question/p-msvaiufj-bu.html" target="_blank" title="¿La comparación con resultados literales de cadena en comportamiento no especificado?"> ¿La comparación con resultados literales de cadena en comportamiento no especificado? </a> </li> <li class="side_article_list_item"> 7. <a href="http://es.uwenku.com/question/p-qehmwkhp-bk.html" target="_blank" title="Convertir marca de tiempo Unix a la norma ISO 8601"> Convertir marca de tiempo Unix a la norma ISO 8601 </a> </li> <li class="side_article_list_item"> 8. <a href="http://es.uwenku.com/question/p-qgdcndpg-z.html" target="_blank" title="¿La función de Erlang no existe en el módulo?"> ¿La función de Erlang no existe en el módulo? </a> </li> <li class="side_article_list_item"> 9. <a href="http://es.uwenku.com/question/p-mzzuolqx-bd.html" target="_blank" title="Rendimiento de Redis vs Disk en la aplicación de caché"> Rendimiento de Redis vs Disk en la aplicación de caché </a> </li> <li class="side_article_list_item"> 10. <a href="http://es.uwenku.com/question/p-ndyidfqk-x.html" target="_blank" title="NSInvalidUnarchiveOperationException con ContainerView"> NSInvalidUnarchiveOperationException con ContainerView </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;Cuestiones relacionadas</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://es.uwenku.com/question/p-pfwrhzkr-bq.html" target="_blank" title="La forma más rápida de analizar cadenas json (sin jquery)"> La forma más rápida de analizar cadenas json (sin jquery) </a> </li> <li class="side_article_list_item"> 2. <a href="http://es.uwenku.com/question/p-cbpcsbvq-q.html" target="_blank" title="¿Cuál es la forma más rápida de analizar grandes documentos XML en Python?"> ¿Cuál es la forma más rápida de analizar grandes documentos XML en Python? </a> </li> <li class="side_article_list_item"> 3. <a href="http://es.uwenku.com/question/p-klmsoxzv-k.html" target="_blank" title="¿Por qué es más rápida esta expresión regular?"> ¿Por qué es más rápida esta expresión regular? </a> </li> <li class="side_article_list_item"> 4. <a href="http://es.uwenku.com/question/p-mnlrjzyf-bc.html" target="_blank" title="¿Es esta la manera más óptima? C bitfields"> ¿Es esta la manera más óptima? C bitfields </a> </li> <li class="side_article_list_item"> 5. <a href="http://es.uwenku.com/question/p-xsjwrhpa-d.html" target="_blank" title="Dibujo de textura rápida OpenGL con objetos de búfer de vértice. ¿Es esta la manera de hacerlo?"> Dibujo de textura rápida OpenGL con objetos de búfer de vértice. ¿Es esta la manera de hacerlo? </a> </li> <li class="side_article_list_item"> 6. <a href="http://es.uwenku.com/question/p-hqhvoaix-y.html" target="_blank" title="Django: Analizar JSON en mi plantilla usando Javascript"> Django: Analizar JSON en mi plantilla usando Javascript </a> </li> <li class="side_article_list_item"> 7. <a href="http://es.uwenku.com/question/p-yprviumz-bw.html" target="_blank" title="¿cuál es la mejor manera de analizar la respuesta XML en AJAX"> ¿cuál es la mejor manera de analizar la respuesta XML en AJAX </a> </li> <li class="side_article_list_item"> 8. <a href="http://es.uwenku.com/question/p-tzcjuhbf-a.html" target="_blank" title="Cómo analizar XML utilizando jQuery?"> Cómo analizar XML utilizando jQuery? </a> </li> <li class="side_article_list_item"> 9. <a href="http://es.uwenku.com/question/p-bxjbhwcc-bw.html" target="_blank" title="Diferencia en objetos JSON usando Javascript/JQuery"> Diferencia en objetos JSON usando Javascript/JQuery </a> </li> <li class="side_article_list_item"> 10. <a href="http://es.uwenku.com/question/p-gdqfgivp-v.html" target="_blank" title="hipotenusa más rápida en javascript?"> hipotenusa más rápida en 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://es.uwenku.com/contact">Contactanos</a></li> <li>© 2020 ES.UWENKU.COM</li> <li><a target="_blank" href="https://beian.miit.gov.cn/">沪ICP备13005482号-4</a></li> <li><script type="text/javascript" src="https://v1.cnzz.com/z_stat.php?id=1280101193&web_id=1280101193"></script></li> <li><a href="http://www.uwenku.com/" target="_blank" title="优文库">简体中文</a></li> <li><a href="http://hk.uwenku.com/" target="_blank" title="優文庫">繁體中文</a></li> <li><a href="http://ru.uwenku.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.uwenku.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.uwenku.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.uwenku.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.uwenku.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.uwenku.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.uwenku.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.uwenku.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.uwenku.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.uwenku.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.uwenku.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f78a970f17b19a79fc477a3378096f29"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>