thiosyiasar
Messages postés186Date d'inscriptionlundi 11 mars 2002StatutMembreDernière intervention30 novembre 20103 29 nov. 2010 à 17:57
(non je ne suis pas mort)
Bon juillet c'est loin mais je vais m'occuper de cette source rapidement pour la mettre a jour et ensuite répondre à ta question. Faut que je replonge dans le source, merci a tous pour vos tests et vos contributions
juliensmarties
Messages postés16Date d'inscriptionvendredi 8 août 2008StatutMembreDernière intervention 5 août 2010 20 juil. 2010 à 11:09
Bonjour,
J'aurais souhaité savoir si tu avais mis à jour ton appli ? si oui ou puis-je la trouver ?
Si non comment faire un correctif pour récupérer un truc du type:
[www.google.fr
Google c'est par là
]
Comment faire pour pouvoir récupérer "Google c'est par là" ?
Merci à ceux qui me viendrons en aide
Ju
Mathrb
Messages postés7Date d'inscriptionjeudi 5 avril 2007StatutMembreDernière intervention22 juin 2010 13 mars 2009 à 00:55
Merci
C'est ce que je cherchais
thiosyiasar
Messages postés186Date d'inscriptionlundi 11 mars 2002StatutMembreDernière intervention30 novembre 20103 13 févr. 2009 à 12:58
Merci brlecler
Je vais me bloquer un peu de temps pour corriger tout ca et intégrer ton correctif.
A+
brlecler
Messages postés3Date d'inscriptionlundi 13 septembre 2004StatutMembreDernière intervention13 février 2009 13 févr. 2009 à 11:09
Il y a plus largement, un problème sur les objets (les tags) imbriqués les uns dans les autres. Normalement c'est le genre de problème qui doit se traiter par la récursivité. Mais étant donné que par ailleurs ce code fonctionne bien, voici un correctif qui permet de bien traiter des imbrications du genre:
BBBSSSSPSPSPDIDIDI
Dans le fichier HtmlDocument déclarer la classe:
class TagLie
{
public CB_HtmlTag Tag;
public TagLie Parent;
}
Dans la méthode HtmlDocument:extracttags
dans le case '<' remplacer :
if (oTags.Count > 0)
oTags[oTags.Count - 1].Value = oValue;
par
TagActif.Tag.Value = oValue;
dans le case '>' , après la ligne oTags.Add(t); ajouter le bloc :
TagLie Nouveau = new TagLie();
Nouveau.Tag = t;
if (t.IsCloseTag)
{
TagActif = TagActif.Parent;
}
else
{
Nouveau.Parent = TagActif;
TagActif = Nouveau;
}
Et ça va fonctionner beaucoup mieux...
thiosyiasar
Messages postés186Date d'inscriptionlundi 11 mars 2002StatutMembreDernière intervention30 novembre 20103 22 août 2007 à 17:48
Merci Zeroc00l pour ces tests ! ceux sont effectivement des bugs !
Je vais me libérer un peu de temps pour corriger ça !
A+
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 22 août 2007 à 03:05
Oops y'a pas d'attribut "Value" pour les nodes .. je parlais de l'attribut "Tag.Value"
(d'ailleur j'ai mis Tag au pluriel dans tes sources !)
Quand je met l'URL d'un fichier qui n'est pas de l'HTML ça throw dans tous les sens !
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 22 août 2007 à 02:12
Bon je viens d'utiliser réellement ta source cette fois ... et j'ai malheureusement de mauvaise nouvelles ... des bugs !
Si tu charges un fichier contenant : "Blablabla"
Le Node qui correspond a " ... " a sa propriete "Value" à null et
le Node qui correspond a "" a sa propriete Value correspondant a "Blablabla".
Or si je ne m'abuse c'est le node "" qui devrait contenir "Blablabla" !
Avec le code suivant : ""Blablabla" les deux nodes ont leur propriété "Value" à null, autrement dit "Blablabla" a disparu !
Pour l'instant ca ne m'a pas posé de problème sérieux.
Autrechose :
Quand ton parser tombe sur attribut genre href="..." il cree un HtmlAttribut. Ne devrait il pas enlever les double quotes de la valeur ? Les double quotes ne sont là que pour rendre l'xml plus lisible, il ne font pas parti de la valeur, donc d'après moi faudrait les virer ...
Bon ben bonne chance ! :)
P.S. : Merci pour l'info concernant le formatage de l'html
thiosyiasar
Messages postés186Date d'inscriptionlundi 11 mars 2002StatutMembreDernière intervention30 novembre 20103 15 août 2007 à 10:07
Salut Zeroc00l
Merci pour ton commentaire.
Cependant je pense que pour formater ton code html regarde plutot du coté du HtmlTextWriter qui est utilisé par ASP.net pour généré le rendu HTML
Ce code fait le contraire (il n'existe malheureusement pas de HtmlTextReader...) enfin pas officiellement chez Microsoft
A+
cs_Zeroc00l
Messages postés367Date d'inscriptionlundi 1 avril 2002StatutMembreDernière intervention11 février 2010 14 août 2007 à 18:17
Au premier lancement j'ai oublié de regler mon firewall...
d'où une exception dans la clause finally de la fonction
"btnLoad_Click" !
la ligne "this._oHtmlDocument.Loading -= oLoadingEventHandler;"
provoque une NullReferenceException parce que "_oHtmlDocument" est à null.
Sinon sympa la source ... Ca m'évite d'avoir à faire une source pour reformater le code HTML d'une page :)
sorcer1
Messages postés21Date d'inscriptionmardi 6 juillet 2004StatutMembreDernière intervention 6 janvier 2009 26 mars 2007 à 11:20
"le probleme c'est que ce composant charge la page et toutes les ressouces images, scripts...."
c'est pas vrai le composant WebBrowser ne charge pas les images, sauf si on l'utilise comme composant visuel!
ton html parser est vraiment plus leger et plus rapide de le WebBrowser en tout cas, par contre il ne gère les cookies et c'est bien dommage!
bravo quand même!
FREMYCOMPANY
Messages postés276Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention22 décembre 2008 12 févr. 2007 à 16:48
thiosyiasar
Messages postés186Date d'inscriptionlundi 11 mars 2002StatutMembreDernière intervention30 novembre 20103 12 févr. 2007 à 03:25
Salut FremyCompany,
T'as plus d'infos sur le blog ou le projet ?
FREMYCOMPANY
Messages postés276Date d'inscriptionjeudi 12 janvier 2006StatutMembreDernière intervention22 décembre 2008 11 févr. 2007 à 18:05
J'ai lu dans un blog qu'un projet similaire au tiens avait vu le jour.
Je l'ai essayé et il me semblait que ca tenait la route...
thiosyiasar
Messages postés186Date d'inscriptionlundi 11 mars 2002StatutMembreDernière intervention30 novembre 20103 10 janv. 2007 à 13:16
C'est vrai, mais le probleme c'est que ce composant charge la page et toutes les ressouces images, scripts.... avant d'y donner l'accès (j'ai une appli qui l'utilise). Le temps de traitement donc plus lent et peu adapté à une analyse sur plusieurs pages.
( Je suis en train de remettre à jour avec une démo un peu plus visuelle :) et un code plus propre)
cs_badrbadr
Messages postés475Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention 3 novembre 20081 10 janv. 2007 à 12:27
Une alternative est d'utiliser le contrôle WebBrowser qui permet d'accéder à l'arbre DOM de la page html. C'est aussi tolérant que peut l'être Internet Explorer :)
cs_GG29
Messages postés326Date d'inscriptionvendredi 23 décembre 2005StatutMembreDernière intervention 8 février 201117 9 janv. 2007 à 21:01
A la place de if(a == "") on peut utiliser if(a == String.Empty) ou encore
if(String.IsNullOrEmpty(a)) , ce qui est quand même plus jolie à mon goût.
Autrement ce code peut être pratique dans une appli.
thiosyiasar
Messages postés186Date d'inscriptionlundi 11 mars 2002StatutMembreDernière intervention30 novembre 20103 9 janv. 2007 à 19:45
effectivement...
ce code est ressorti d'une vielle valise!
une petite remise au propre s'impose...
merci pour tes remarques Bidou
(to be continued...)
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 9 janv. 2007 à 19:26
C'est assez dur de faire quelques chose qui tient la route dut à la souplesse de l'HTML bien sûr ;-)
Quelques remarques en vrac après une RAPIDE lecture:
- Dans la classe MainClass, l'url de teste (google) n'est pas valide.
- Pourquoi utiliser sans cesse le nom des classes (System.String, System.Boolean) plutôt que leurs mots clefs associés (string, bool) ?
- La méthode GetHtmlChars de HtmlChars retourne toujours null !?
- Détail: pour les types enum, on met en principe des MAJ
- Le code peut être simplifier à certains endroits, exemple:
29 nov. 2010 à 17:57
Bon juillet c'est loin mais je vais m'occuper de cette source rapidement pour la mettre a jour et ensuite répondre à ta question. Faut que je replonge dans le source, merci a tous pour vos tests et vos contributions
20 juil. 2010 à 11:09
J'aurais souhaité savoir si tu avais mis à jour ton appli ? si oui ou puis-je la trouver ?
Si non comment faire un correctif pour récupérer un truc du type:
[www.google.fr
Google c'est par là
]
Comment faire pour pouvoir récupérer "Google c'est par là" ?
Merci à ceux qui me viendrons en aide
Ju
13 mars 2009 à 00:55
C'est ce que je cherchais
13 févr. 2009 à 12:58
Je vais me bloquer un peu de temps pour corriger tout ca et intégrer ton correctif.
A+
13 févr. 2009 à 11:09
BBBSSSSPSPSPDIDIDI
Dans le fichier HtmlDocument déclarer la classe:
class TagLie
{
public CB_HtmlTag Tag;
public TagLie Parent;
}
Dans la méthode HtmlDocument:extracttags
dans le case '<' remplacer :
if (oTags.Count > 0)
oTags[oTags.Count - 1].Value = oValue;
par
TagActif.Tag.Value = oValue;
dans le case '>' , après la ligne oTags.Add(t); ajouter le bloc :
TagLie Nouveau = new TagLie();
Nouveau.Tag = t;
if (t.IsCloseTag)
{
TagActif = TagActif.Parent;
}
else
{
Nouveau.Parent = TagActif;
TagActif = Nouveau;
}
Et ça va fonctionner beaucoup mieux...
22 août 2007 à 17:48
Je vais me libérer un peu de temps pour corriger ça !
A+
22 août 2007 à 03:05
(d'ailleur j'ai mis Tag au pluriel dans tes sources !)
Quand je met l'URL d'un fichier qui n'est pas de l'HTML ça throw dans tous les sens !
22 août 2007 à 02:12
Si tu charges un fichier contenant : "Blablabla"
Le Node qui correspond a " ... " a sa propriete "Value" à null et
le Node qui correspond a "" a sa propriete Value correspondant a "Blablabla".
Or si je ne m'abuse c'est le node "" qui devrait contenir "Blablabla" !
Avec le code suivant : ""Blablabla" les deux nodes ont leur propriété "Value" à null, autrement dit "Blablabla" a disparu !
Pour l'instant ca ne m'a pas posé de problème sérieux.
Autrechose :
Quand ton parser tombe sur attribut genre href="..." il cree un HtmlAttribut. Ne devrait il pas enlever les double quotes de la valeur ? Les double quotes ne sont là que pour rendre l'xml plus lisible, il ne font pas parti de la valeur, donc d'après moi faudrait les virer ...
Bon ben bonne chance ! :)
P.S. : Merci pour l'info concernant le formatage de l'html
15 août 2007 à 10:07
Merci pour ton commentaire.
Cependant je pense que pour formater ton code html regarde plutot du coté du HtmlTextWriter qui est utilisé par ASP.net pour généré le rendu HTML
Ce code fait le contraire (il n'existe malheureusement pas de HtmlTextReader...) enfin pas officiellement chez Microsoft
A+
14 août 2007 à 18:17
d'où une exception dans la clause finally de la fonction
"btnLoad_Click" !
la ligne "this._oHtmlDocument.Loading -= oLoadingEventHandler;"
provoque une NullReferenceException parce que "_oHtmlDocument" est à null.
Sinon sympa la source ... Ca m'évite d'avoir à faire une source pour reformater le code HTML d'une page :)
26 mars 2007 à 11:20
c'est pas vrai le composant WebBrowser ne charge pas les images, sauf si on l'utilise comme composant visuel!
ton html parser est vraiment plus leger et plus rapide de le WebBrowser en tout cas, par contre il ne gère les cookies et c'est bien dommage!
bravo quand même!
12 févr. 2007 à 16:48
URL du blog http://www.csharpfr.com/code.aspx?ID=41034
12 févr. 2007 à 03:25
T'as plus d'infos sur le blog ou le projet ?
11 févr. 2007 à 18:05
Je l'ai essayé et il me semblait que ca tenait la route...
10 janv. 2007 à 13:16
( Je suis en train de remettre à jour avec une démo un peu plus visuelle :) et un code plus propre)
10 janv. 2007 à 12:27
9 janv. 2007 à 21:01
if(String.IsNullOrEmpty(a)) , ce qui est quand même plus jolie à mon goût.
Autrement ce code peut être pratique dans une appli.
9 janv. 2007 à 19:45
ce code est ressorti d'une vielle valise!
une petite remise au propre s'impose...
merci pour tes remarques Bidou
(to be continued...)
9 janv. 2007 à 19:26
Quelques remarques en vrac après une RAPIDE lecture:
- Dans la classe MainClass, l'url de teste (google) n'est pas valide.
- Pourquoi utiliser sans cesse le nom des classes (System.String, System.Boolean) plutôt que leurs mots clefs associés (string, bool) ?
- La méthode GetHtmlChars de HtmlChars retourne toujours null !?
- Détail: pour les types enum, on met en principe des MAJ
- Le code peut être simplifier à certains endroits, exemple:
if (iChars[pChar] == '"')
{
bIsInString = !bIsInString;
iAttributeLength++;
}
else
{
iAttributeLength++;
}
devient
if (iChars[pChar] == '"') bIsInString = !bIsInString;
iAttributeLength++;
autres exemple avec oStackNode.Add(oNode); (peut-être y'en a encore d'autres)
- Les méthodes GetImageReferences, GetScriptReferences, GetLinkTagReferences et GetAnchorReferences sont très redondantes!
- Debug.WriteLine("VAL: '" + sTagValue + "'"); => Debug.WriteLine("VAL: '{0}'", sTagValue);
Voilà pour un début.
Sinon le code à l'air plutôt structuré...