2010-08-04 30 views
9

Estoy haciendo un add-on para firefox y carga una página html usando ajax (add-on tiene su panel XUL).¿Qué es más rápido, XPath o Regexp?

Ahora en este punto, no busqué la forma de crear un objeto document y colocar los contenidos de la solicitud ajax en él y luego usar xPath para encontrar lo que necesito.
En su lugar, estoy cargando el contenido y analizándolo como texto con expresión regular.

Pero tengo una pregunta. ¿Cuál sería mejor usar, xPath o expresión regular? ¿Cuál es más rápido de realizar?

La página HTML constará de cientos de elementos que contienen el mismo texto, y lo que básicamente quiero hacer es contar cuántos elementos hay.

Quiero que mi complemento funcione lo más rápido posible y no conozco la mecánica detrás de regexp o xPath, así que no sé cuál es más efectivo.

Espero que estuviera claro. Gracias

+6

Enlace obligatorio: [** No utilizar regex **] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – Amarghosh

+0

Ninguno es intrínsecamente más rápido que el otro, todo depende de sus implementaciones. –

+0

Solo me pregunto, ¿por qué algunas personas consideran que esta "no es una pregunta real"? Preguntar qué tipo de enfoque es el mejor (o el más rápido) para una tarea de programación típica me parece una verdadera pregunta para SO (imo). – Abel

Respuesta

17

Siempre que trabaje con XML, use XPath (o XSLT, XQuery, SAX, DOM o cualquier otro método compatible con XML para revisar sus datos). Do never use regular expressions for this task.

¿Por qué? El procesamiento XML es complejo y trata con todas sus rarezas, entidades externas/analizadas/no procesadas, DTD, instrucciones de procesamiento, manejo de espacio en blanco, colapso, normalización Unicode, secciones CDATA etc. lo hace muy difícil de crear una forma regular confiable de obtener su datos. Simplemente considere que le ha tomado años a la industria aprender a analizar mejor XML, debería ser razón suficiente para no intentar hacerlo usted mismo.

Respondiendo a su pregunta: cuando se trata de velocidad (que debería ser no sea su principal preocupación), depende en gran medida de la implementación del compilador/procesador XPath o Regex. A veces, XPath será más rápido (es decir, cuando se usen claves, si es posible, o XSLT compilado), otras veces, las expresiones regulares serán más rápidas (si puede usar una expresión regular precompilada y su consulta es fácil). Pero las expresiones regulares nunca son fáciles con HTML/XML simplemente debido al problema de paréntesis (etiquetas) anidados que coinciden, que no se pueden resolver de manera confiable solo con expresiones regulares.

Si la entrada es enorme, regex tenderá a ser más rápido, a menos que la implementación XPath pueda hacer el procesamiento de transmisión (que creo que no es el método dentro de Firefox).

Usted escribió:

"que es más eficaz" *

la que le trae más rápida de una aplicación fiable y estable que es relativamente rápida. Use XPath. Es lo que se usa dentro de Firefox y otros navegadores si necesita que su código se ejecute desde un navegador.

+0

Gracias por su respuesta. Ahora tengo otra pregunta para principiantes. ¿Sabrías cómo crear un nuevo objeto de documento HTML o XML dentro del complemento XUL de Firefox? Como document.evaluate solo funciona con XML y HTML y NO con XUL. Necesito de alguna manera poner el texto de respuesta AJAX al documento DOM para poder usar xPath en él. He pasado 40 minutos buscando esto pero todavía no lo he podido encontrar. Sé que podría cargar los contenidos en una nueva pestaña y acceder allí, pero eso no es lo que quiero hacer. Gracias. (no estoy seguro si tuve que crear una nueva pregunta en lugar de preguntar en un comentario aquí) – user1651105

+1

@aleluja: Debería volver a preguntar por su nueva pregunta. –

+0

excelente respuesta, solo una cosa más para agregar: de hecho, la última tecnología xpath supera a las expresiones regulares. –

Cuestiones relacionadas