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

  FORUM HardWare.fr
  Programmation
  PHP

  PHP/XML Validation qui dure des heures

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PHP/XML Validation qui dure des heures

n°1166122
Je@nb
Kindly give dime
Posté le 31-07-2005 à 18:18:29  profilanswer
 

Je fais un ptit traitement XML sur un fichier XHTML mais je voulais utiliser GetElementById mais celui-ci nécessite une validation du fichier. J'ai donc mis avant mon appel $xhtml->validate(); mais après avoir testé avec XDebug la fonction prend 8sec pour s'éxecuter, je peux virer ça ?

mood
Publicité
Posté le 31-07-2005 à 18:18:29  profilanswer
 

n°1166302
Je@nb
Kindly give dime
Posté le 01-08-2005 à 02:45:59  profilanswer
 

up les gas :)

n°1166390
FlorentG
Unité de Masse
Posté le 01-08-2005 à 10:08:52  profilanswer
 

C'est normal ;) Qui dit valider dit DTD nécessaire. Donc il doit télécharger la DTD sur le site du W3C, qui est bien bondé niveau demandes...
 
Donc suivant ton parseur, et si tu es maître de ton serveur web, tu peux foutre un catalogue XML pour qu'il cherche la dtd en locale... sinon, bah avec de l'xpath tu peux récupérer un truc facilement via l'id...

n°1166646
Je@nb
Kindly give dime
Posté le 01-08-2005 à 12:41:46  profilanswer
 

C'est bien ce que je me disais qu'il récup la DTD sur W3C vu les logs.
 
En fait mon parseur c'est php avec l'interface DOM donc libxml
Je vais voir si il y a possibilité de foutre un catalogue (j'en avait entendu parler pour un autre parser mais j'ai pas percuté).
Pour l'XPath je vais voir sinon mais ça prend du temps aussi mais bon entre valider + getElementById et un XPath je pense que le XPath est plus rapide

n°1166744
FlorentG
Unité de Masse
Posté le 01-08-2005 à 14:20:02  profilanswer
 

Ouais, grave plus rapide. Solution :
 

function &get_by_id(&$dom, $id) {
 
  $xpath_context =& xpath_new_context($dom);
  xpath_register_ns($xpath_context, 'html', 'http://www.w3.org/1999/xhtml');
 
  $xpath_result =& xpath_eval($xpath_context, '//*[@id="' . $id . '"]');
 
  if($xpath_result) {
 
    return $xpath_result->nodeset[0];
  }
}


 
C'est dommage que la recommandation xml:id ne soit pas encore sortie. Ca permet de mettre partout un attribut xml:id, du coup pas besoin de valider pour savoir quel attribut est de type ID...


Message édité par FlorentG le 01-08-2005 à 14:20:29
n°1166752
Je@nb
Kindly give dime
Posté le 01-08-2005 à 14:24:21  profilanswer
 

http://php5.bitflux.org/xmlonspeed/slide_24.php montre qq optimisation, cependant c'est moins générique donc quand on sait où se trouve notre node un peu près il peut être sympa de l'optimiser :)
 
Merci sinon :)
 
Sinon fodra que je te pose qq question sur ton système de template XSLT parce que c'est ce dont je pensais faire pour mes futurs projets :)

n°1166754
FlorentG
Unité de Masse
Posté le 01-08-2005 à 14:25:51  profilanswer
 

Ah ben c'est sûr que quand on sait où c'est :D Envoi un peu ta structure

n°1166786
M Orthogra​phe
Posté le 01-08-2005 à 14:46:23  profilanswer
 

Je@nb a écrit :

up les gas :)


 
Je veux bien être gentil mais "les gas".....

n°1166793
FlorentG
Unité de Masse
Posté le 01-08-2005 à 14:49:12  profilanswer
 

M Orthographe a écrit :

Je veux bien être gentil mais "les gas".....


"Je veux bien être gentil, mais «les gas»...

n°1166797
Je@nb
Kindly give dime
Posté le 01-08-2005 à 14:51:19  profilanswer
 

C'est juste un fichier XHTML, donc déjà je peux lui dire de chercher dans le body et dans le paragraphe qui m'interresse.
Mon exemple est pas très interressant j'ai juste fait pour voir la puissance du DOM.

mood
Publicité
Posté le 01-08-2005 à 14:51:19  profilanswer
 

n°1166798
M Orthogra​phe
Posté le 01-08-2005 à 14:51:25  profilanswer
 

Tu as parfaitement raison FlorentG, j'ai omis la virgule...

n°1166799
FlorentG
Unité de Masse
Posté le 01-08-2005 à 14:52:00  profilanswer
 

Du coup l'expression xpath serait :

/html/body/p[@id='pouet']

n°1166800
Je@nb
Kindly give dime
Posté le 01-08-2005 à 14:52:42  profilanswer
 

Oué c'est ce que j'ai fait ;)
 
Merci en tout cas ;)

n°1166825
Je@nb
Kindly give dime
Posté le 01-08-2005 à 15:01:57  profilanswer
 

Hmmm ta fonction il faut la mettre en php5 :D avec DOM et plus DOM XML :) jvais le faire :)

n°1166830
FlorentG
Unité de Masse
Posté le 01-08-2005 à 15:02:39  profilanswer
 

Ouais là c'est du PHP4, mais domxml toujours ;)
 
Sous PHP4, c'est DOMXML
Sous PHP5, c'est DOM tout court :)

n°1166908
Je@nb
Kindly give dime
Posté le 01-08-2005 à 15:45:54  profilanswer
 

Voila pour une version PHP5
 
A noter que DOMXpath->evaluate() n'est pas dispo avant php 5.1 :)
 

Code :
  1. function &get_by_id(&$dom, $location, $id) {
  2.   $xpath = new DOMXPath($dom);
  3.   $xpath->registerNamespace('html', 'http://www.w3.org/1999/xhtml');
  4.   $xpath_result = $xpath->query('/'.$location.'[@id="' . $id . '"]');
  5.   if($xpath_result) {
  6.     return $xpath_result->item(0);
  7.   }
  8. }


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

  PHP/XML Validation qui dure des heures

 

Sujets relatifs
Ou trouver un herbergeur gratuit Php Mysql environ 50Mo + 25Mo SQL[PHP][Resolu] Sortir du php proprement
Optimisation de scripts PHP, comment la calculer.Récupérer un nom de fichier (sans l'extension) en Php
[XML]-[XSL] Référence interfichiers[PHP - MySQL] Récupérer choix d'un "enum" dans BDD
[EMPLOI] Recherche Programmeur PHP / GraphisteCherche Parseur XML
SQL Server et le XMLPb Php/sql, gestion d'une liste dynamique
Plus de sujets relatifs à : PHP/XML Validation qui dure des heures


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