2010-09-08 8 views
15

Je n'aime pas certaines des décisions de conception dans HtmlAgilityPack:Alternatives à HtmlAgilityPack?

  • Lorsque vous utilisez SelectNodes, si aucun nœud se trouvent, il retourne null plutôt que d'un ensemble vide, de sorte que vous ne pouvez pas simplement foreach dessus sans vérification nulle.
  • Lorsque vous essayez de sélectionner des enfants avec node.SelectNodes, il effectue une recherche à partir de la racine du document à moins que vous n'utilisiez descendant::, ce qui n'est pas du tout un comportement évident ou attendu, IMO.
  • HtmlDocument.Load ne retourne pas le nœud racine, qui est ce que vous voulez 99% du temps, je pense que

Vous pourriez en désaccord avec cela bien sûr, mais ce n'est pas le point. Je cherche quelque chose différent. Quelque chose qui se comporte un peu plus, ou quelque chose qui utilise la syntaxe jQuery serait encore mieux. Suggestions?

+0

J'espère que cela fonctionne pour vous, http://code.google.com/p/fizzler/ –

+1

Pour les exemples que vous avez donnés, il devrait être assez facile de modifier le comportement à celui que vous désirez. Puisque HtmlAgilityPack est open source, avez-vous envisagé de prendre une fourchette locale et de faire ces changements? –

+0

Pour le moment, je viens de l'emballer avec mes propres fonctions, mais quand même. S'il y a quelque chose d'autre un peu plus aligné sur mes philosophies, je ne vais pas gaspiller mes efforts :) Je ne fais que de l'analyse HTML de temps en temps pour de petits projets, donc je ne pense pas que ça vaut le coup c'est comme ça que je pense que ça devrait être. – mpen

Répondre

2

Si vous ne faites qu'analyser le code HTML, une autre option peut être SgmlReader. Si vous modifiez le code HTML, pas tellement. Ne vous rappelez pas comment il se comporte en ce qui concerne les problèmes que vous avez soulevés, mais il vaut la peine de vérifier.

+0

Pour autant que je puisse voir, cette bibliothèque ne convertit HTML malformé en HTML valide ... il ne dit rien à propos de xpath/interroger/traverser l'arborescence DOM. Je n'ai pas besoin de modifier le document, mais j'ai * besoin * de l'interroger. – mpen

+4

Il le transforme en XML valide sous la forme d'un XmlDocument. Vous pouvez ensuite appeler l'une des surcharges XmlDocument.CreateNavigator() pour obtenir un objet XPathNavigator pour effectuer des requêtes xpath. – aciemian

4

Started appelé SharpQuery

prend actuellement en charge ID, classe, étiquette, et les sélecteurs d'attribut.

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

Mise à jour: Je ne suis pas maintenir ce projet, désolé. CsQuery a des mises à jour récentes (en juillet 2013), mais je n'ai aucune expérience de l'utiliser.

+1

J'ai voté pour SharpQuery + HTMLAgilityPack de fusionner il y a longtemps. Cos l'analyseur HTML et la structure DOM doivent être distinctement différents du moteur de recherche ... En outre, HTMLAgilityPack supporte plusieurs méthodes de requête - XPath, LINQ et DOm traversal. SharpQuery en plus de cela serait génial – CVertex

+0

Oh, attendez que vous venez de commencer ce projet? J'ai proposé de rejoindre un projet différent qui fait exactement la même chose que SharpQuery ... lemme le trouver – CVertex

+1

FOund it - http://code.google.com/p/fizzler/ et voici ma demande de fusion http: //htmlagilitypack.codeplex .com/Discussion/View.aspx?ThreadId = 76383 – CVertex