Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1077 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Pear::XML_Parser, récupérer le contenu texte d'une balise

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pear::XML_Parser, récupérer le contenu texte d'une balise

n°1042201
titouille
Posté le 10-04-2005 à 18:39:32  profilanswer
 

Bonjour !!!!
 
Je me suis mis en tête d'utiliser le parser xml de la librairie Pear, nommé XML_Parser.
 
Tant que je ne récupérais que les attributs, tout allait bien, mais maintenant que je veux récupérer le contenu textuel d'une balise, je n'y arrive pas...
J'utilise le parser en mode 'func', c'est à dire que je déclare pour chaque balise à parser une fonction xmltag_[MABALISE]. Ces fonctions contiennent la ressource (l'occurence de classe ? le fichier xml ?), le nom du tag ainsi que les attributs... ce que je recherche, c'est le contenu... est-ce que quelqu'un saurai m'expliquer comment faire ??
 
D'avance merci pour une éventuelle piste ou réponse ;)
 
 
a++

mood
Publicité
Posté le 10-04-2005 à 18:39:32  profilanswer
 

n°1042590
dwogsi
Défaillance cérébrale...
Posté le 11-04-2005 à 09:08:12  profilanswer
 

Bah je sais pas si j'ai bien compris ta question si c'est le cas alors je dirais un p'tit de preg_replace devrait convenir à ta situation avec la bonne expression régulière.
cf: http://www.php.net/

n°1042676
titouille
Posté le 11-04-2005 à 10:53:39  profilanswer
 

Hello!!
 
Nan, en fait, pas grand chose à voir, les regex...
Le truc, c'est que le XML_Parser de la lib PEAR est décliné en 2 versions : XML_Parser, et XML_Parser_Simple, qui est une version light et qui permet de récupérer les contenus, contrairement à XML_Parser.
 
Donc la réponse se trouvait dans l'utilisation de XML_Parser_Simple.
 
 
Merci tout de même ;)

n°1042748
Hermes le ​Messager
Breton Quiétiste
Posté le 11-04-2005 à 11:57:00  profilanswer
 

titouille a écrit :

Hello!!
 
Nan, en fait, pas grand chose à voir, les regex...
Le truc, c'est que le XML_Parser de la lib PEAR est décliné en 2 versions : XML_Parser, et XML_Parser_Simple, qui est une version light et qui permet de récupérer les contenus, contrairement à XML_Parser.
 
Donc la réponse se trouvait dans l'utilisation de XML_Parser_Simple.
 
 
Merci tout de même ;)


 
Pourtant la remarque précédente était tout à fait justifiée. Je trouve très lourd l'utilisation des xmlparsers pour récupérer le contenu entre des balises. Dans bien des cas, une simple regexp suffit (et est bien plus rapide en plus...)

n°1042940
titouille
Posté le 11-04-2005 à 13:59:17  profilanswer
 

Hello hermes
 
J'ai déjà entendu ça ailleurs, mais utiliser des regex pour parser du xml n'est pas recommandé, car une regex ne va en aucun vérifier la validité de ton document xml. Tu n'auras pas accès à toute la panoplie de méthodes internes et utilisateurs pour manipuler du xml.
 
Par contre, il est vrai que dans mon cas, l'utilisation de regex aurait pu être envisageable, mais je ne le ferai pas, pour la simple et bonne raison qu'un parser sax est plus rapide... J'ai un document de 18mo à parser. (Si je ne me trompe pas, un parser Sax lit environ 2mo à la seconde)
Le problème, dans ce document, c'est que certaines balises sont nommées avec des '-', du genre hello-world.
J'ai mis en place 2 ereg_replace (ou preg_replace, je ne suis plus trop sur, chuis vraiment pas spécialiste dans les regex...) dans mon script pour qu'il transforme les 2 balises mal nommées en supprimant le tiret avant d'exécuter le vrai parsing, mais je peux te dire qu'a partir de là, ce n'était plus 6 à 10 secondes d'attente (parsing sax uniquement) mais plutot 30 ou 40...  
Donc non, je ne pense pas que les regex sont vraiment plus rapide qu'un parser sax bien implémenté. Et de plus, je n'ai pas que les contenus à récupérer. j'ai également les attributs. Donc résolument PEAR:XML_Parser_Simple :p ;)

n°1042944
FlorentG
Unité de Masse
Posté le 11-04-2005 à 14:03:25  profilanswer
 

Normalement, en regardant la doc du parser de pear, tu peux voir que c'est géré par évènement. Donc tu dois te retrouver parfois avec des nodes de type text...

n°1042956
titouille
Posté le 11-04-2005 à 14:16:52  profilanswer
 

Ok FlorentG, mais comment je déclare une fonction qui va récupérer le contenu (on parle de parser Sax en mode 'func', donc déclaration d'une fonction pour une balise... exemple : balise <title> = function xmltag_TITLE( $ressource, $nodename, $attributes ) Ici je n'ai pas la possibilité de récupérer le contenu. Donc si je dois déclarer une fonction du genre xmltag_CDATA, ça va devenir bien galère à gérer quel contenu appartient à quel node (à coup de switch, me diras-tu, oui mais c'est lourd, tout de même...)
 
Dans ce mode, je ne crois pas que c'est possible de récupérer le contenu textuel... Enfin, je n'ai pas trouvé de solutions avec XML_Parser, mais XML_Parser_Simple implémente des méthodes du genre handleElement_TITLE( $nodename, $attributes, $data ) ou $data correspond au contenu textuel. Donc c'est tout bon.
 
 :hello:

n°1042959
FlorentG
Unité de Masse
Posté le 11-04-2005 à 14:18:22  profilanswer
 

Mystère :D Moi j'utilise les fonctions DOM XML de PHP 4 :/

n°1042998
titouille
Posté le 11-04-2005 à 14:43:53  profilanswer
 

Ok. Alors juste pour info :  
 
Il faut savoir que Dom et Sax sont 2 parsers fondamentalement différents... utiliser dom pour un document de 18 mo à parser en entier est une folie pure.  
 
Dom met en mémoire tout ou un fragment du document pour pouvoir y naviguer à la manière d'un treeview. Il garde en mémoire le document et donne accès à des méthodes particulières genre getChildNodes, getNodeAt, etc... relativement lourd, mais pratique pour la navigation à l'intérieur du document.
Sax quant à lui fait une lecture linéaire du document, du début à la fin. Pas moyen de revenir en arrière. Et là, tu peux créer à peu près n'importe quel parsing, vu que c'est toi qui décide comment tu l'implémente. Après, on peut arriver à de véritables usines à gaz, lol.
 
Et c'est cette grande différence qui permet à Sax d'être si rapide. Chacun de ces parsers ont des utilisations bien précises, c'est pour ça que je parlais de folie pure en début de post ;) Dom ne serait pas du tout adapté à l'utilisation que je fais d'xml (parsing pour transformer un doc xml en objet "dataProvider" pour Flash remoting. Et il serai surtout beaucoup, mais alors beaucoup trop long à me donner un retour...
 
a++

n°1043015
FlorentG
Unité de Masse
Posté le 11-04-2005 à 14:57:37  profilanswer
 

Ok, c'est sûr que si le fichier est énorme, c'est pas judicieux de l'ouvrir avec DOM :D


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Pear::XML_Parser, récupérer le contenu texte d'une balise

 

Sujets relatifs
Recuperer IPMon tableau s'agrandit avec le texte... Help
Vraiment besoin d'aide SVP :') !!!! Récupérer vidéo JT[CSS] Le texte déborde du calque
Besoin d'aide pour mettre en ligne bcp de texte[Résolu]PEAR : DB_Pager : Paginer une requete Mysql
[Php/MySQL] recupérer nom de colonneSouligner texte d'un bouton de formulaire Mozilla
[VB.NET] Créer un fichier XMLrecuperer un champ d'input disabled
Plus de sujets relatifs à : Pear::XML_Parser, récupérer le contenu texte d'une balise


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR