|
| Extraire des données à partir d'un fichier HTML |
| Iniciado por Ambroise, 04,dic. 2019 20:59 - 18 respuestas |
| |
| | | |
|
| |
Miembro registrado 112 mensajes |
|
| Publicado el 04,diciembre 2019 - 20:59 |
Bonjour, Soit un fichier HTML duquel je souhaiterai extraire des données. J'ai par exemple dans le fichier :
<tr> <th class="libelle">Civilité :</th> <td>Mme</td> </tr> <tr> <th class="libelle">Prénom :</th> <td>MARIE</td> </tr> <tr> <th class="libelle">Nom :</th> <td>ANTOINETTE</td> </tr> Or je n'arrive pas à récupérer les infos Mme, MARIE et ANTOINETTE pour alimenter mon formulaire. J'ai tenté avec le code suivant :
nPositionDebut est un entier=0 nPositionfin est un entier=0
nIDFichier = fOuvre(SC_SelecteurFichier_DS.SAI_FIC, foLecture) SI nIDFichier <> -1 ALORS nPositionDebut=fCherche(nIDFichier,">Civilité :</th>") nPositionfin=fCherche(nIDFichier,"Nom et prénom(s) : </th> <td class=""rich-text""> <div> <p>",nPositionDebut) Trace(nPositionDebut+" - "+nPositionfin) fFerme(nIDFichier) SINON Erreur() FIN
mais mon TRACE renvoie toujours -1 donc ne trouve pas la position. Qui peut m'aider pour débloquer cette situation ? D'avance merci. Cordialement |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 352 mensajes |
|
| Publicado el 05,diciembre 2019 - 09:33 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 24 mensajes |
|
| Publicado el 05,diciembre 2019 - 13:27 |
Bonjour,
Peut-être la fonction HTMLVersTexte() |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 05,diciembre 2019 - 15:43 |
ROMULUS001 a écrit : Bonjour. Vous n'adoptez pas la bonne méthode pour l'extraction des données, l'astuce, c'est de dire qu'un fichier HTML se traite exactement de la même manière qu'un fichier XML. Pour cela, faites appel à la fonction XMLExtraitChaîne Documentation de la fonction : https://doc.pcsoft.fr/fr-FR/?3081017&name=xmlextraitchaine_fonction
Attention tout de même, le HTML est très permissif et même s'il s'apparente à du xml, régulièrement on rencontre des balises qui ne sont pas fermées. Dans ce cas là le xml est considéré comme incorrect et on ne peut pas le parcourir.
Il n'existe toujours pas de parseur HTML sur Windev, ce qui est bien dommage.
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 352 mensajes |
|
| Publicado el 05,diciembre 2019 - 17:15 |
Philippe SB a écrit :
> Attention tout de même, le HTML est très permissif et même s'il s'apparente à du xml, régulièrement on rencontre des balises qui ne sont pas fermées. Dans ce cas là le xml est considéré comme incorrect et on ne peut pas le parcourir.
Ceci est un faux problème, si un fichier est corrompu ou syntaxiquement incorrect, il est très compliqué de pouvoir travailler dessus, mais du contenu HTML comme présenté dans le 1er post ne causera aucun problème |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 06,diciembre 2019 - 14:36 |
Ceci est un faux problème, si un fichier est corrompu ou syntaxiquement incorrect, il est très compliqué de pouvoir travailler dessus, mais du contenu HTML comme présenté dans le 1er post ne causera aucun problème
C'est justement tout le cœur du problème. Je doute que le html qui va être récupéré ne contienne que ça. Je parle en connaissance de cause pour m'y être cassé les dents plus d'une fois.
Après ce n'est qu'une remarque et c'est en essayant qu'il verra si son html est compatible xml ou non.
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 112 mensajes |
|
| Publicado el 06,diciembre 2019 - 15:51 |
Bonjour et merci de vous interresser à mon problème. Si je comprends bien, je dois mattre dans mon code quelque chose du type
SourceXML est une chaîne = fChargeTexte("MonDossier.html") Résultat est une chaîne
Suis je sur la bonne piste ?Mensaje modificado, 06,diciembre 2019 - 15:53 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 112 mensajes |
|
| Publicado el 06,diciembre 2019 - 15:54 |
suite du code car il plante le forum :

suis je sur la bonne voie ?
Merci de votre aide à tous.Mensaje modificado, 06,diciembre 2019 - 15:55 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 06,diciembre 2019 - 15:58 |
sMaChaineHTML est une chaîne = fChargeTexte("MonDossier.html") SourceXML est un xmlDocument = XMLOuvre(sMaChaineHTML,depuisChaîne)
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 112 mensajes |
|
| Publicado el 06,diciembre 2019 - 16:05 |
OK merci pour la remise sur le bon chemin. Je vais continuer mes tests. Bonne fin de journée. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 13 mensajes |
|
| Publicado el 06,diciembre 2019 - 16:28 |
Bonjour,
Nous avons réalisé un composant nommé wQuery qui vous permet d'extraire ceux que vous souhaitez dans le code HTML de la même façon que jQuery (même syntaxe).
Ce composant permet de faire gagner énormément d'heure, il réalise un parsing du code, et vous mets à disposition une syntaxe très souple pour récupérer les éléments que vous souhaitez (innerTest, outerText, attribut, etc...).
Nous le commercialisons pour une exploitation libre.
N'hésitez pas à nous contacter si vous souhaitez en savoir plus.
Cordialement,
-- CEO MindSoft Expert WinDev / WebDev / WinDev Mobile |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 962 mensajes |
|
| Publicado el 07,diciembre 2019 - 10:29 |
hello, Philippe SB a écrit : > Il n'existe toujours pas de parseur HTML sur Windev, ce qui est bien dommage.
et les requêtes XPATH alors ? exemple :
// J.P Décembre 2019 MaCHaineHTML est une chaîne = [ <!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=iso8859-1" /> <style> .libelle { background-color: black; color: white; } </style> </head> <body> <h1>Mon Test HTML</h1> <table id="matable"> <tr><th class="libelle">Civilité :</th><td>Mme</td></tr> <tr><th class="libelle">Prénom :</th><td>MARIE</td></tr> <tr><th class="libelle">Nom</th><td>ANTOINETTE</td></tr> <table> </body> </html> ]
res est un booléen = XMLDocument("maRecherche",MaCHaineHTML,xHTML) SI ErreurDétectée ALORS Erreur("le fichier n'est pas au bon format ") RETOUR FIN
RequeteXPATH est une chaîne = "/html/body/table[1]/tr[th='Civilité :']/td" AfficherValeurs("maRecherche",RequeteXPATH)
RequeteXPATH = "//*[@id=""matable""]/tr/td" AfficherValeurs("maRecherche",RequeteXPATH)
avec la procédure AfficherValeurs :
Procedure AfficherValeurs(doc,xpath) b est un booléen = XMLExecuteXPath (doc, xpath)
SI b=Vrai ET XMLEnDehors(doc)=Vrai ALORS Trace("XMLRésultat="+XMLRésultat(doc)) FIN
SI XMLTrouve(doc)=Vrai ALORS x est un entier = 1 TANTQUE XMLTrouve(doc)=Vrai Trace(x," : ",XMLDonnée(doc)) x++ XMLSuivant(doc) FIN XMLAnnuleRecherche(doc) FIN Trace("==============================")
Résultat :

-- Ami calmant, J.PMensaje modificado, 07,diciembre 2019 - 10:36 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 352 mensajes |
|
| Publicado el 09,diciembre 2019 - 10:59 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 09,diciembre 2019 - 12:20 |
et les requêtes XPATH alors ? Je persiste et signe en disant que comme HTML est très permissif, le xml peut ne pas être correct et dans ce cas, les requêtes xpath ne fonctionneront pas non plus.
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 352 mensajes |
|
| Publicado el 09,diciembre 2019 - 14:05 |
> Je persiste et signe en disant que comme HTML est très permissif, le xml peut ne pas être correct et dans ce cas, les requêtes xpath ne fonctionneront pas non plus.
Et si le html serait en fait du xhtml? |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.682 mensajes |
|
| Publicado el 09,diciembre 2019 - 14:28 |
Et bien je vous laisse vous casser les dents, j'en ai déjà fait les frais plus d'une fois, mais rien ne vaut l'expérience personnelle.
-- Cordialement,
Philippe SAINT-BERTIN |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 352 mensajes |
|
| Publicado el 10,diciembre 2019 - 14:09 |
| le xhml est du hml qui est correct au niveau xml, donc on revient à un cas facile à considérer |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 112 mensajes |
|
| Publicado el 10,diciembre 2019 - 15:53 |
Bonjour, Je suis pris sur d'autres sujets mais je fais les tests au plus vite pour vous tenir informé.... |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 962 mensajes |
|
| Publicado el 21,diciembre 2019 - 17:15 |
hello, ROMULUS001 a écrit :
Avec ma version jurassique de windev (16) cette fonction n'existait pas. ============================= Philippe SB a écrit :
et les requêtes XPATH alors ?
Je persiste et signe en disant que comme HTML est très permissif, le xml peut ne pas être correct et dans ce cas, les requêtes xpath ne fonctionneront pas non plus. Dans le cas d'un HTML très permissif on peut utiliser l'assemblage dotnet HtmlAgilityPack. Voici le code pour l'équivalent de mon code qui se trouve au-dessus.
docHTML est un HtmlAgilityPack.HtmlDocument() docHTML.LoadHtml(MaCHaineHTML) noeudsHTML est un HtmlNodeCollection dynamique noeudHTML est un HtmlNode dynamique noeudsHTML = docHTML.DocumentNode.SelectNodes("/html/body/table[1]/tr[th='Civilité :']/td") POUR TOUT noeudHTML de noeudsHTML Trace(noeudHTML.get_InnerText()) FIN Trace("=============") noeudsHTML = docHTML.DocumentNode.SelectNodes("//*[@id=""matable""]/tr/td") POUR TOUT noeudHTML de noeudsHTML Trace(noeudHTML.get_InnerText()) FIN
-- Ami calmant, J.P |
| |
| |
| | | |
|
| | | | |
| | |
|