Pregunta

He intentado utilizar ActiveResource para analizar un servicio web que era más como un documento HTML y seguí recibiendo un error 404.

¿Es necesario utilizar un analizador XML para esta tarea en lugar de ActiveResource?

Mi conjetura es que ActiveResource sólo es útil si usted está consumiendo datos de otra aplicación Rails y los datos XML es fácilmente traducible a un modelo de rieles. Por ejemplo, si el servicio web es más amplio XML como un documento HTML o un canal RSS, desea utilizar un analizador como hpricot o nokogiri. ¿Es esto correcto?

¿Cómo saber cuándo utilizar un analizador XML y cuándo usar ActiveResource?

¿Fue útil?

Solución

Actualización: ActiveResource tampoco es un analizador XML. Es un consumidor REST que le permite interactuar con un recurso remoto similar a como lo haría un modelo ActiveRecord. Se hace uso de un analizador XML bajo el capó (estoy asumiendo a través de XmlMini ActiveSupport muestro a continuación).

ActiveResource tiene algunos requisitos estrictos acerca de la estructura del contenido XML y funciona mejor cuando interactúan con la API REST de otra aplicación Rails. No se pretende hacer genérica captura de imágenes de una página HTML. Para que el uso Nokogiri directamente.


ActiveSupport no es un analizador de XML, es una colección diversa de métodos y clases útiles de Ruby. Sin embargo, sí ofrece una envoltura alrededor de muchos diferentes analizadores XML que le da una interfaz consistente.

Puede ver qué analizador XML se está utilizando y cambiar a un analizador XML diferente. Pruebe esto en script/console.

ActiveSupport::XmlMini.backend # => ActiveSupport::XmlMini_REXML
ActiveSupport::XmlMini.backend = 'Nokogiri'
ActiveSupport::XmlMini.backend # => ActiveSupport::XmlMini_Nokogiri
# it will now use Nokogiri

Sin embargo, todavía habrá que utilizar el analizador XML en Nokogiri que asume estricta marcado, válida. La mayoría de las páginas HTML no se ajustan a este requisito estricto y por lo tanto es mejor usar analizador de HTML de Nokogiri directamente en lugar de pasar por ActiveSupport.

doc = Nokogiri::HTML(...)

Otros consejos

XmlMini escribí porque quería responder a la misma pregunta. XmlMini en realidad no hace mucho, y que le permite mantener la concentración. Pero si usted tiene cualquier problema que YAML o JSON no está calificado para manejar, XmlMini no va a hacer el trabajo bien.

Por ejemplo, si usted tiene cualquier necesidad de validar la estructura del XML que está tratando con, XmlMini no es la herramienta. La validación de la mano es horrible.

Del mismo modo, si usted está tratando con los datos que reutiliza elemento estándar de atributos y la semántica de otra parte, al igual que incluye fragmentos de UBL, OpenDoc o Atom, que realmente debería obtener algunas herramientas mejores para los espacios de nombres.

ryanb menciona Nokogiri, y no puedo pensar en nada más maravilloso para estas cosas. Tiene todo el poder de libxml, con más elegancia que casi cualquier biblioteca en Ruby. Yo no sólo quiero decir para el análisis de XML, que es la altura de los mejores proyectos de _why.

Sin embargo, hay algunas cosas que incluso Nokogiri no ha sido diseñado. Si realmente, absolutamente, positivamente tiene que matar a cada soporte en ángulo en la habitación en la velocidad de romper el cuello, tienes que volver a escuchar SAX. Pero si necesita acelerar tan mal, no lo haga en Ruby. Hacerlo de expatriados o libxml con pura C o no hacerlo en absoluto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top