Lire fichier avec xml avec xml_parser_create()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Lire fichier avec xml avec xml_parser_create()

par Hywan » 06 nov. 2008, 16:59

Hey :),

Tu devrais t'intéresser à l'option XML_OPTION_TARGET_ENCODING de la fonction xml_parser_set_option() (voir le manuel). Tu pourrais l'utiliser de cette façon :
$encoding = …;
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $encoding);
Si tu es sur PHP 5, je te conseille SimpleXML, ça te changera la vie :).

Lire fichier avec xml avec xml_parser_create()

par Joce » 31 oct. 2008, 10:38

Bonjour à tous,

J'ai créé une classe vite fait pour ouvrir un fichier xml encodé ISO-8859-1, mais j'ai un problème avec les caractères spéciaux.

Voici ma classe:
class xml  {
	
	private $parser;
	private $data;

	function __construct($data)
	{
		$this->parser = xml_parser_create('ISO-8859-1');
		$this->data = $data;

		xml_set_object($this->parser, $this);
		xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
		xml_set_element_handler($this->parser, "tag_open", "tag_close");
		xml_set_character_data_handler($this->parser, "cdata");
			
		$this->parse();
	}

	private function parse() 
	{
		xml_parse($this->parser, $this->data);
	}

	private function tag_open($parser, $tag, $attributes) 
	{
	}

	private function cdata($parser, $cdata) 
	{
		echo $cdata . "<br />";
	}

	private function tag_close($parser, $tag) 
	{
	}

	function __destruct()
	{
		xml_parser_free($this->parser);
	}

} // fin de la classe xml

$xml_parser = new xml(file_get_contents("xml.xml"));

et voici mon fichier xml

Code : Tout sélectionner

<?xml version="1.0" encoding="ISO-8859-1" ?> <personnes> <personne> <nom>Dupénd</nom> <service>Achaté</service> </personne> <personne> <nom>Durand</nom> <service>Achéts</service> </personne> <personne> <nom>Dupuis</nom> <service>Courrier</service> </personne> </personnes>
Voila la réponse que j'ai :

Code : Tout sélectionner

Dup<br /> énd<br /> Achat<br /> é<br /> Durand<br /> Ach<br /> éts<br /> Dupuis<br /> Courrier<br />
Hormis les br intempestifs, il me coupe les noms avec des caractères spéciaux :?
Avez-vous une solution ?

Merci

Joce