Entrez le sujet ici

Hello,

Je voudrais parser un fichier XML avec PHP. Ce que je voudrais c’est détecter une balise et virer cette balise et son contenu.

Si quelqu’un a une idée…

j’ai jetté un oeil du côté de la doc :

  $moteur = xml_parser_create();

  $resultat = «  »;

  $inMauvaisTag = false;

  function startElement($parser,$name,$attr){

    if ($name == "monTagAVirer") {

  $inMauvaisTag = true;

    }else {

  $inMauvaisTag = false;

    }

   if(!$inMauvaisTag) {

  $resultat .= « < ».$name.";

  // faire une boucle sur tableau de $attr pour reconstituer attribut=« valeur »

  $resultat .= « > »;

   }

  }

  function endElement($parser,$name){

   if(!$inMauvaisTag){

  $resultat .= « < ».$name.">";

   }

  }

  function characterData($parser,$data){

   if(!$inMauvaisTag){

  $resultat .= $data;

   }

  }

xml_set_element_handler($xml_parser, « startElement », « endElement »);

xml_set_character_data_handler($xml_parser, « characterData »);

xml_parse($xml_parser, $data, feof($fp))

xml_parser_free($xml_parser);

// maintenant $resultat devrait contenir ton xml sans les tag que t’aime pas :slight_smile:

Code certifié pas testé du tout

Merci Beaucoup, je vais tester çà d’ici peu, le temps de remettre ma machine en route

Salut,

Je ne comprend pas trop cette ligne là :

 

xml_set_character_data_handler($xml_parser, "characterData");
en particulier que faut-il mettre à la place de "characterData" ??? THX

Ben le nom de la fonction qui va s’occuper des caracteres de ton stream XML.

Mmmokay,
ah ui d’accord chui un peu con sur ce coup là excuses…

Mais j’ai un peu de mal avec le Parsing XML et XML en gal.
Merci

C’est bizarre…

J’ai deux fonctions : une TraiterDebutBalise($analyseur_xml, $balise, $attributs) et une autre TraiterFinBalise($analyseur_xml, $balise).

J’ai besoin d’une variable $check_balise dans mes 2 fonctions. Je met donc global $check_balise dans mes deux fonctions. Malheureusement, cela ne fonctionne pas. Warum ?

function TraiterDebutBalise($analyseur_xml, $balise, $attributs) {

 global $check_balise;

 if ($balise == “g”)
  {
if ($attributs[“id”]==“carre1”)
{
  echo “<”.$balise."";
  if (sizeof($attributs))
  {
while (list($k, $v) = each($attributs)) {
echo " “.$k.”="";
echo “”.$v.""";
  }
}
echo “>”;
$check_balise = TRUE;

 }else{

$check_balise = FALSE;

 }

}else{

 echo “<”.$balise."";

 if (sizeof($attributs)) {

  while (list($k, $v) = each($attributs)) {

echo " “.$k.”="";

echo “”.$v.""";

  }

 }

echo “>”;

$check_balise = TRUE;

}

}

// ----------------------------------------------------------------------------

function TraiterFinBalise($analyseur_xml, $balise) {

global $check_balise;

if ($check_balise) {

print_r($check_balise);

echo “</”.$balise.">";

}

}[/quote]

Euh, j’ai pas fait de php depuis la version 3 mais :
1/ déclarer une variable globale dans une fonction ça me parait curieux.
2/ Ensuite vu que ta premiere fonction semble apparement être là  entre autre (je separerait d’ailleurs les test sur la balise du traitement a effectuer si j’étais toi) pour mettre $check_balise a true ou a false, tu devrais peut être imbriquer tes fonctions ou utiliser une autre variable pour faire la transition, parce que les variables globales c’est bof bof (ça devient vite le bordel quoi)

'Fin bon, bon courage
Ce message a été édité par LeEup le 20/05/2003

:: bah je suis obligé de faire 2 fonctions car c’est pour fournir la fonction :

 

xml_set_element_handler($analyseur_xml, "TraiterDebutBalise", "TraiterFinBalise");
donc voilou...

:: bah je suis obligé de faire 2 fonctions car c’est pour fournir la fonction :

 

xml_set_element_handler($analyseur_xml, "TraiterDebutBalise", "TraiterFinBalise");
donc voilou...

Rien à voir avec la choucroute mais il y a une bourde dans ta signature : caféine s’écrit caffeine en anglais !

(et puis on parle d’un objet (device) on utilise “wich” au lieu de “who” même si ça peut être litigieux dans la phrase actuelle).

< /mode casse pied >
Ce message a été édité par use-writer le 20/05/2003

MerKi de me le signaler.
Y’a une troisième bourde c’est que je bois bcp de café mais je ne pisse pas une seule ligne de code correctement

Heu certes, mais t’as quoi ? Un message d’erreur ?

T’aurais pas un problème sur le nombre de { et } dans ta première fonction ?

Sinon ça me parait correct, à première vue

Ouaih en effet je n’ai pas d’erreurs à proprement parlé. Le problème c’est que $check_balise est constamment à TRUE, ce qui fait sue les balises de fin s’affichent toujours.

Ben… désolé, mais je vois pas…apparement c’est correct

arf…
C’est ce que tout le monde me dit…

Merci en tout cas et je vous tiens au courant si j’ai la réponse