algo relacionado con: libxml2 from java¿por qué el análisis sax es más rápido que el análisis dom? y ¿cómo funciona el stax?
Sí, esta pregunta es bastante larga, lo siento. Lo guardé es tan denso como me pareció posible. Resumí las preguntas para que fuera más fácil echar un vistazo antes de leer todo el asunto.
¿Por qué el análisis sax es más rápido que el análisis dom? Lo único que se me ocurre es que con w/sax probablemente ignoras la mayoría de los datos entrantes y, por lo tanto, no pierdas el tiempo procesando partes del xml que no te importan. IOW: después de analizar w/SAX, no puede volver a crear la entrada original. Si escribiste tu analizador SAX para que representara todos y cada uno de los nodos xml (y pudieras así recrear el original), entonces no sería más rápido que DOM lo haría?
La razón por la que estoy preguntando es que estoy tratando de analizar documentos XML más rápidamente. Necesito tener acceso a todo el árbol xml DESPUÉS de analizar. Estoy escribiendo una plataforma para que los servicios de terceros se conecten, por lo que no puedo anticipar qué partes del documento xml se necesitarán y qué partes no. Ni siquiera sé la estructura del documento entrante. Es por eso que no puedo usar jaxb o sax. La huella de memoria no es un problema para mí porque los documentos xml son pequeños y solo necesito 1 en memoria a la vez. Es el tiempo que se tarda en analizar este documento xml relativamente pequeño que me está matando. No he usado el stax anteriormente, pero quizás necesito investigar más a fondo porque podría ser el punto medio. Si entiendo correctamente, stax conserva la estructura xml original y procesa las partes que solicito según demanda. De esta manera, el tiempo de análisis original puede ser rápido, pero cada vez que le pido que atraviese una parte del árbol aún no se ha cruzado, ¿es entonces cuando se lleva a cabo el procesamiento?
Si proporciona un enlace que responda la mayoría de las preguntas, aceptaré su respuesta (no tiene que responder directamente a mis preguntas si ya las ha respondido en otro lugar).
actualización: Lo reescribí en sax y analiza documentos en promedio 2,1 ms. Esta es una mejora (16% más rápido) durante los 2,5 ms que Dom estaba tomando, sin embargo, no es la magnitud que yo (y otros) habría adivinado
Gracias
Diría que la pregunta de cuál es más rápido es irrelevante para sus propósitos, ya que necesita realizar consultas arbitrarias contra el árbol. Lo que significa que debe compilar una representación del árbol y tener alguna forma de crear consultas en su contra. Entonces, o usa DOM/XPath, o escribe sus propios equivalentes. – Anon
Sospecho, sin embargo, que su verdadero problema no es SAX vs DOM per se, sino cómo está configurado su sistema y/o cómo está accediendo a los datos. Realmente no debería tomar tanto tiempo analizar un documento "pequeño" usando DOM (o uno de los equivalentes de DOM). ¿Has cuantificado la diferencia (que estás viendo) entre SAX y DOM? – Anon
He cuantificado el enfoque DOM. documentos pequeños (aprox. 300k) xml. La implementación actual usa xerces-j y toma aproximadamente 2.5 ms por documento xml en una máquina de 1.5 GHz. para cuantificar sax depende de la cantidad de xml que elijas mantener y de lo que hagas con él. tienes razón, no creo que el sax funcionará para mí, la pregunta fue más por curiosidad. – andersonbd1