2010-08-05 7 views
7

Actualmente estoy desarrollando una aplicación que recupera datos de Internet usando SAX. Lo usé antes para analizar archivos XML simples como Google Weather API. Sin embargo, los sitios web que me interesan llevan el análisis al siguiente nivel. La página es enorme y se ve desordenada. Solo necesito recuperar algunas líneas específicas; el resto no es útil para mí.
¿Es posible omitir esas líneas/etiquetas inútiles, o tengo que ir paso a paso?Analizando archivos XML grandes usando el analizador SAX (omita algunas líneas/etiquetas)

+0

Creo extendida ETV-xml le permite acceder a XML con acceso aleatorio de un modo eficiente de memoria, mucho mejor que SAX o digestor Apache –

Respuesta

1

Sí, puede omitir. Simplemente defina las etiquetas que desee y solo obtendrá esos valores de etiquetas.

+0

Thaks un lote, su respuesta me salvará larga líneas de códigos! – Amine

1

Puede intentar usar XPath que usará SAX detrás de la escena para analizar su xml. La desventaja aquí es que XML se analizará en cada llamada del método de evaluación de Xpath.

+0

¡Gracias por su respuesta, examinaré esta posibilidad! – Amine

1

Usted desea leer etiquetas específicas a continuación DOM analizador es mucho más rápido que SAX parser..SAX analizador es útil si desea analizar grandes archivos XML ..

+0

El análisis SAX es mucho más rápido que DOM. DOM también requiere que todo el documento se traiga a la memoria. –

+0

Muchas gracias por su respuesta, realmente aprecio su ayuda, intentaré usar DOM y ver qué salidas obtengo! – Amine

2

Sí puede hacerlo, simplemente ignorar las etiquetas usted no está interesado en. Pero en cuenta que todo el documento tendrá que ser analizado para esto (DefaultHandler impl)

public startElement(String uri, String localName, 
    String qName, Attributes attributes) { 
    if(localName.equals("myInterestingTag") { 
    // do your thing.... 
    } 
} 

public void endElement(String uri, String localName, String qName) { 
    if(localName.equals("myInterestingTag") { 
    // do your thing.... 
    } 
} 

public void characters(char[] ch, int start, int length) { 
    // if parsing myinteresting tag... do some stuff. 
} 
+0

Gracias, así es como lo hago habitualmente;)! – Amine

1

usted puede tratar de una combinación de TagSoup para crear un documento XML analizable y XPath para ir a buscar las partes interesantes .

+0

gracias DaDaDom por su respuesta, lo investigaré lo antes posible! – Amine

+0

usando tristemente xpath no es tan fácil en Android – Janusz

1

Véase mi respuesta a una pregunta similar para la estrategia de utilizar SAX para saltar/ignore las etiquetas:

Skipping nodes with sax

Se trata de cambiar ContentHandlers en el XMLReader. Cuando lea una portación del documento XML que desea omitir, simplemente cambie el ContentHandler que no hace nada con los eventos. Cuando se llega al final de la sección que se va a ignorar, pasa el control al manejador de contenido que estaba utilizando para procesar el contenido XML.

+0

¡Su respuesta ciertamente ayudará a lograr mi objetivo!muchas gracias -Cheers – Amine

4

Me gusta commons-digester. Le permite especificar reglas contra etiquetas particulares. La regla se ejecuta solo cuando se encuentra la etiqueta.

Digester está construido sobre sax y por lo tanto tiene todas las características de saxo más la especificidad necesaria para analizar selectivamente etiquetas específicas. También utiliza una pila que se empuja con nuevos elementos cuando se encuentra la etiqueta correspondiente y se abre cuando el elemento finaliza.

Lo uso para analizar todos mis archivos de configuración.

Salida digestor en http://commons.apache.org/digester/

+0

Muchas gracias Raja, voy a buscar en esta solución !! – Amine

Cuestiones relacionadas