DOM: nodeName return #text même avec preserveWhiteSpace = false

Anon - 14 août 2014 à 02:55
Bonjour tout le monde,
Voilà, j'ai un petit problème, j'ai créé un classe qui parse un fichier XML et qui appelle un callback donné avec un noeud comme argument.

Voici la classe (XMLParser.class.php):
<?php

class XMLParser
{

	//Declarations
	private $_file = '';
	private $_root = '';
	
	
	//Constructor
	public function __construct($file, $root)
	{
		$this->_file = $file;
		$this->_root = $root;
	}
	
	private function ParseChild($node, $callback)
	{
	
		$children = $node->childNodes;
		
		foreach ($children as $child)
		{
			if ($child->HasChildNodes())
			{
				$this->ParseChild($child, $callback);
				// echo($child->nodeName . ' has ' . $child->childNodes->length . ' CHILDNODES</br>');
			}
			else
			{
				call_user_func_array($callback, array($child));
				// echo($child->nodeName . ' has NO CHILDNODES, calling callback...</br>');
			}
		}
	}
	
	
	//Methods
	public function Parse($callback)
	{
	
		if (is_callable($callback))
		{
			$XMLDoc = new DOMDocument();
			$XMLDoc->preserveWhiteSpace = false;
			$XMLDoc->load($this->_file);
			
			$elements = $XMLDoc->getElementsByTagName($this->_root);
			
			$node = $elements->item(0);
			
			$this->ParseChild($node, $callback);
		}
	}

}

?>


De l'autre côté, j'ai le XML à parser (test.xml):

<racine>
<liste>
<fruit>Une pomme</fruit>
<meuble>Une armoire</meuble>
<vide/>
<artiste>Picasso</artiste>
</liste>
</racine>

Et enfin, j'ai mon fichier, qui va créer une instance de XMLParser afin d'afficher le tout (test.php):
<?php


	function XMLCallback($node)
	{
		echo($node->nodeValue . ' est un ' . $node->nodeName . '</br>');
	}

	include('XMLParser.class.php');

	$XMLParser = new XMLParser('test.xml', 'racine');
	$XMLParser->Parse('XMLCallback');

?>



Et voilà ce qui m'est affiché:

Une pomme est un #text
Une armoire est un #text
est un vide
Picasso est un #text

Ce qui veut dire que nodeName me retourne #text même si preserveWhiteSpace = false. Je voudrais qu'il m'affiche "Une pomme est un fruit, Une armoire est un meuble...". Comment puis-je faire pour que les balise #text n'existent plus et que les valeurs soient directement assignée à fruit, meuble... ? Merci d'avance!