Page 1 sur 1

Lire fichier avec xml avec xml_parser_create()

Posté : 31 oct. 2008, 10:38
par Joce
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

Posté : 06 nov. 2008, 16:59
par Hywan
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 :).