2010-09-08 24 views
15

que no me gustan algunas de las decisiones de diseño realizados en HtmlAgilityPack:Alternativas a HtmlAgilityPack?

  • Al utilizar SelectNodes, si no se encuentran los nodos, devuelve null en lugar de un conjunto vacío, por lo que puede no sólo foreach sobre ella sin un cheque nulo
  • Al intentar seleccionar niños con node.SelectNodes, en realidad busca desde la raíz del documento, a menos que use descendant::, que no es nada obvio ni espera ningún comportamiento, IMO.
  • HtmlDocument.Load no devuelve el nodo raíz, que es lo que se desea el 99% del tiempo, creo que

Usted puede estar en desacuerdo con eso, por supuesto, pero eso no es el punto. Estoy buscando algo diferente. Algo que se comporta un poco más esperado, o algo que utiliza la sintaxis de jQuery sería aún mejor. Sugerencias?

+0

Espero que sea útil para usted, http://code.google.com/p/fizzler/ –

+1

Para los ejemplos que ha proporcionado, debería ser bastante fácil modificar el comportamiento al que desea. Como HtmlAgilityPack es de código abierto, ¿ha considerado tomar un tenedor local y hacer esos cambios? –

+0

Por el momento lo he envuelto con mis propias funciones, pero aún así. Si hay algo más que esté un poco más alineado con mis filosofías, no voy a perder mis esfuerzos :) Solo me dedico al análisis de HTML de vez en cuando para pequeños proyectos, así que no creo que valga la pena revisarlo es como yo creo que debería ser. – mpen

Respuesta

2

Si solo está analizando el html, otra opción podría ser SgmlReader. Si está modificando el html, no tanto. No recuerdes cómo se comporta con respecto a los problemas que planteaste, pero vale la pena echarle un vistazo.

+0

Por lo que puedo ver, esa biblioteca solo convierte HTML malformado en HTML válido ... no dice nada sobre xpath/consultar/atravesar el árbol DOM. No necesito modificar el documento, pero I * do * necesito consultarlo. – mpen

+4

Lo convierte en un xml válido en forma de XmlDocument. Luego puede llamar a una de las sobrecargas XmlDocument.CreateNavigator() para obtener un objeto XPathNavigator para realizar consultas xpath. – aciemian

4

proyecto comenzó llamados SharpQuery

Actualmente apoya la identificación, la clase, la etiqueta, y selectores de atributos.

a 
a[href] 
a[href^=http://stackoverflow.com] 
.class 
#id 

Actualización: No estoy manteniendo este proyecto, lo siento. CsQuery tiene actualizaciones recientes (desde julio de 2013), pero no tengo ninguna experiencia en su uso.

+1

He votado a favor de que SharpQuery + HTMLAgilityPack se fusione hace mucho tiempo. Debido a que el analizador HTML y la estructura DOM deben ser claramente diferentes del motor de consulta ... Además, HTMLAgilityPack admite múltiples métodos de consulta: XPath, LINQ y DOm transversal. SharpQuery además de eso sería increíble – CVertex

+0

Oh, espera, ¿acabas de empezar ese proyecto? Propuse unirme a un proyecto diferente que hace exactamente lo mismo que SharpQuery ... déjame encontrarlo – CVertex

+1

Encuentralo - http://code.google.com/p/fizzler/ aquí está mi solicitud de fusión http: //htmlagilitypack.codeplex .com/Thread/View.aspx?ThreadId = 76383 – CVertex