|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Boris conception et traitement de documents xhtml Inscription : août 2011 Messages : 107 ![]() |
Bonjour,
Ce post fait suite à mon précédent post sur l'extraction d'une chaîne contenant un mot précis ("schtroumpf" dans mes exemples) et va faire plaisir à Stealth qui de façon répétée prône DOM pour parser du xhtml au lieu d'utiliser des regex. (Je lancerai tantôt une discussion sur le thème regex versus DOM). J'ai besoin — c'est d'ailleurs le point clé de mon projet — de parser à coup sûr des balises du style Code :
Comment concrètement (s'il vous plaît !) procéder pour parser ces balises et récupérer : 1) la balise entière (que je dois remplacer après traitement des informations contenues dans la balise) 2) l'ensemble des class appliquées sous forme de chaîne (je peux avoir besoin de connaître les autres class appliquées en dehors de la class schtroumpf) 3) le texte du commentaire éventuel (que je dois traiter séparément) 4) les informations principales concernant la class schtroumpf, c'est-à-dire le contenu de la balise <p ou span class="xxx schtroumpf xxx"> [...] </p> ou </span> Un grand, grand merci d'avance |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() David GuillotChef de projet en SSII Inscription : mars 2004 Messages : 879 ![]() |
![]() Ma suggestion est clairement de regarder du côté de XPath. Regarde le plus ancien commentaire de cette page de la doc PHP, renseigne-toi sur la syntaxe XPath pour trouver des sous-éléments et des valeurs d'attributs, et tu auras gagné
__________________
Avant de poser une question ici : ![]() Après résolution de votre question : un clic sur , un et un vote pour les personnes qui vous ont aidé |
|
00
|
|
|
#3 | ||
|
Membre du Club
![]() Boris conception et traitement de documents xhtml Inscription : août 2011 Messages : 107 ![]() |
Merci David de ta réponse, et pardon de ne pas t'avoir répondu plus tôt (j'étais en déplacement)
Bien évidemment, j'avais consulté la doc Xpath et avais effectué pas mal d'essais infructueux avant d'adresser, en dernier recours, mon post de demande d'aide. Apparemment, je suis encore très loin de maîtriser les concepts nécessaires. J'ai cependant pu, au bout de quatre heures de tâtonnements, mettre en oeuvre la solution suivante (le code est inclus dans une fonction ; $text_area est le texte html à analyser : Code :
Concernant la question de fond regex ou DOM - XPath, je pense que j'utiliserai les regex lorsqu'elles peuvent facilement être définies et qu'elles permettent de sélectionner à coup sûr l'élément recherché, et que je réserverai DOM - Xpath pour les cas où la recherche par regex ne peut suffire. Car, dans l'état actuel de ma pratique et de ma compréhension de DOM - Xpath, le coût horaire de cette approche est beaucoup trop élevé par rapport à l'approche regex. (En particulier, le blocage sur la question objet de ce post m'aura coûté cher.) PS : Pourquoi echo supprime-t-il les caractères accentués ? Quand je demande echo "balise entière = " le résultat affiché est « balise entire ». Comment faire pour que echo affiche les caractères accentués ? |
||
|
|
00
|
|
|
#4 | ||
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
Code :
__________________
http://blog.stealth35.com/ |
||
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Boris conception et traitement de documents xhtml Inscription : août 2011 Messages : 107 ![]() |
Merci Stealth !
Comme flashub, je suis émerveillé et impressionné devant la puissance de DOM quand il est utilisé avec une telle virtuosité. Je pense que je vais sérieusement approfondir la question pour tenter de n'utiliser in fine que des expressions DOM - Xpath - SimpleXML pour rechercher des éléments et n'utiliser des regex que pour l'analyse textuelle proprement dite des éléments trouvés. Merci encore ! Et bravo ! |
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
oui je compte sur toi pour porter le flambeau de ton pseudo,
alors avec DOMXPath y'a une méthode plus complète de Xpath c'est evaluate, et ta accès a d'autre fonction, par exemple compter combien y'a de div, au lieur de faire //div faire une boucle, incrémenté une variable, tu fait direct count(//div) et evaluate te renvoie par exemple 3, malheureusement sous PHP c'est que du Xpath 1.0
__________________
http://blog.stealth35.com/ |
|
|
10
|
|
|
#7 | |||
|
Membre du Club
![]() Boris conception et traitement de documents xhtml Inscription : août 2011 Messages : 107 ![]() |
Citation:
Peux-tu me préciser la signification et le rôle du paramètre '%s' dans la fonction contains ci-dessus ? Merci par avance |
|||
|
|
00
|
|
|
#8 | |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
Citation:
__________________
http://blog.stealth35.com/ |
|
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Boris conception et traitement de documents xhtml Inscription : août 2011 Messages : 107 ![]() |
Merci de ta prompte réponse.
Je comprends : %s signifie « remplacer par la chaîne donnée dans l'argument suivant le format, c'est-à-dire dans le cas présent "schtroumpf" ». Mais pourquoi ne pas écrire directement Code :
$query = $xpath->query(sprintf("//*[contains(concat(' ', normalize-space(@class), ' '), ' schtroumpf ')]")); |
|
|
00
|
|
|
#10 |
![]() ![]() Inscription : septembre 2010 Messages : 7 131 ![]() |
on fait comme on veux, j'ai juste plus jolie a la lecture surtout quand il faut mettre une variable
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() Boris conception et traitement de documents xhtml Inscription : août 2011 Messages : 107 ![]() |
Compris !
Donc si il faut écrire Code :
$query = $xpath->query(sprintf("//*[contains(concat(' ', normalize-space(@class), ' '), ' %s ')]", $className')); |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com