Gran XmlSlurper vs XMLParser


Busqué por un tiempo sobre este tema y también encontré algunos resultados, que estoy mencionando al final de la publicación. ¿Puede alguien ayudarme a responder con precisión estas tres preguntas para los casos que se enumeran a continuación?

  1. ¿Para qué casos de uso usar XmlSluper tiene más sentido que XMLParser y viceversa (desde el punto de vista de la facilidad de uso de API/Sintaxis)?

  2. ¿Cuál es más eficiente en memoria? (parece Slurper)

  3. Cuál procesa el xml más rápido?

Caso a. ¿cuando tengo que leer casi todos los nodos en el xml?

Caso b. cuando tengo que leer solo unos pocos nodos (como usar la expresión gpath)?

Caso c. cuando tengo que actualizar/transformar el xml?

Siempre que el documento xml no sea trivial (con el nivel de profundidad y tamaño del xml).

Recursos :

Http://www.tutkiun.com/2009/10/xmlparser-and-xmlslurper.html establece:

Diferencia entre XMLParser y XmlSlurper:

Hay similitudes entre XMLParser y XmlSlurper cuando se usa para lectura simple pero cuando los usamos para lectura avanzada y cuando procesamiento de documentos XML en otros formatos hay diferencias entre dos.

XMLParser almacena resultados intermedios después de analizar documentos. Pero en por otra parte,

XmlSlurper no almacena los resultados internos después de procesar XML documento.

El verdadero, diferencias fundamentales se hacen evidentes al procesar el información analizada. Eso es cuando se procesa con datos directos in situ manipulación y procesamiento en un escenario de streaming.

Http://groovy.dzone.com/news/john-wilson-groovy-and-xml

El maravilloso doc (XMLParser, XmlSlurper ) y el sitio de groovy los explica bien (aquí y aquí ) pero no hace un gran trabajo al explicar lo mencionado anteriormente pregunta.

Author: kunal, 2011-09-26

2 answers

La gran diferencia entre XmlSlurper y XMLParser es que el analizador sintáctico creará algo similar a un DOM, mientras que Slurper intenta crear estructuras solo si realmente es necesario y, por lo tanto, utiliza rutas, que se evalúan perezosamente. Para el usuario ambos pueden verse extremadamente iguales. La diferencia es más que la estructura del analizador se evalúa solo una vez, las rutas de slurper se pueden evaluar bajo demanda. On demand se puede leer como" más memoria eficiente pero más lento " aquí. En última instancia, depende de cuántos rutas / peticiones que haces. Si, por ejemplo, solo desea conocer el valor de un atributo en una determinada parte del XML y luego terminar con él, XMLParser aún procesaría todo y ejecutaría su consulta en el quasi DOM. En que se creará una gran cantidad de objetos, la memoria y el gasto de CPU. XmlSlurper no creará los objetos, por lo tanto ahorrará memoria y CPU. Si necesita todas las partes del documento de todos modos, el slurper pierde la ventaja, ya que creará al menos tantos objetos como el analizador sintáctico.

Ambos pueden hacer transformaciones en el documento, pero el slurper asume que es una constante y, por lo tanto, primero tendría que escribir los cambios y crear un nuevo slurper para leer el nuevo xml. El analizador permite ver los cambios de inmediato.

Así que la respuesta a la pregunta (1), el caso de uso, sería, que se utiliza el analizador sintáctico si se tiene que procesar todo el XML, el slurper si solo partes de él. La API y la sintaxis realmente no juegan un papel importante en eso. La gente Groovy trata de hacer esos dos son muy similares en experiencia de usuario. También preferirías el analizador sintáctico sobre el slurper si quieres hacer cambios incrementales en el XML.

La introducción anterior también explica entonces qué es más eficiente en memoria, pregunta (2). El slurper es, a menos que leas en todos de todos modos, entonces el analizador puede, pero no tengo números reales sobre cuán grande es la diferencia entonces.

También la pregunta (3) puede ser respondida por la introducción. Si tiene varias rutas evaluadas perezosas, debe evaluar una vez más, esto puede ser más lento que si solo navegas por un gráfico existente como en el analizador sintáctico. Así que el analizador puede ser más rápido, dependiendo de su uso.

Así que diría que (3a) la lectura de casi todos los nodos en sí no hace mucha diferencia, ya que entonces las solicitudes son el factor más determinante. Pero en el caso (3b) diría que el slurper es más rápido si solo tiene que leer unos pocos nodos, ya que no tendrá que crear una estructura completa en la memoria, que en sí misma ya cuesta tiempo y memoria.

Como para (3c)... en estos días ambos pueden actualizar / transformar el XML, que es más rápido en realidad está más vinculado a la cantidad de partes del xml que tiene que cambiar. Si muchas partes diría que el analizador, si no, entonces tal vez el slurper. Pero si desea, por ejemplo, cambiar un valor de atributo de "Fred " a" John "con el slurper, solo para consultar más tarde este" John " usando el mismo slurper, no funcionará.

 95
Author: blackdrag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-25 03:53:25

Te Daré Respuestas Claras:

*XML Parser Es Más Rápido Que XML Slurper.
* XML Slurper Consume Menos Memoria Que XML Parser.
* XML Parser Puede Analizar Y Actualizar El XML Simultáneamente.
* Para XML Slurper Es Necesario Que MarkupBuild Los XML Después De Cada Actualización Que Realice.
* Cuando Desee Utilizar Expresiones De Ruta XML Slurper Sería Mejor Que Parser.
* Para Leer Casi Todos Los Nodos XML Parser Estaría Bien

Espero Que Ayude

 0
Author: srinivasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-02 06:07:58