XML DomDocument et "ignoreWhite"

Le
taupe
Salut à tous,

Il semble que la classe DomDocument native dans php5 n'ignore pas les sauts
de ligne dans un xml et que du coup il m'ajoute des nodes non désirés. Par
exemple pour un xml comme ça :

<root>
<item><titre>A</titre></item>
<item><titre>B</titre></item>
</root>

il me dit que root contient 5 childNodes au lieu de 2. Si je vire tout
les sauts de ligne du xml il me renvoit bien 2 childNodes. Comment régler ce
problème ? En actionscript il existe une propriété nommée ignoreWhite qui
sert justement à ça mais je ne trouve pas d'équivalent en php !

Aussi je n'arrive pas à utiliser la méthode getElementsByTagName.

$dom = new DomDocument();
$dom->load('xml/poste.xml');

foreach ($dom->firstChild->childNodes as $child) {
$tmp = $child->getElementsByTagName('titre');
echo $tmp->nodeName;
}

J'obtiens cette erreur, comme si l'objet renvoyé par getElementsByTagName
n'était pas un noeud xml :

Notice: Undefined property: DOMNodeList::$nodeName (etc)

Si vous savez comment ça marche, je veux bien un coup de main.
Merci !

taupe
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Mickael Wolff
Le #938803
Bonjour,


Il semble que la classe DomDocument native dans php5 n'ignore pas les sauts
de ligne dans un xml et que du coup il m'ajoute des nodes non désirés. Par
exemple pour un xml comme ça :


Ben non, il ne les ajoute pas. Ils sont bien là. Ce sont des n½uds qui
doivent être données.

... il me dit que root contient 5 childNodes au lieu de 2. Si je vire tout
les sauts de ligne du xml il me renvoit bien 2 childNodes. Comment régler ce
problème ?


Et pourtant il y a cinq n½uds.

En actionscript il existe une propriété nommée ignoreWhite qui
sert justement à ça mais je ne trouve pas d'équivalent en php !


http://fr2.php.net/manual/fr/ref.dom.php
Propriété DOMDocument::PreserveWhiteSpace, mais je ne penses pas que
ça résolves ton problème. Ce que tu peux faire, c'est d'utiliser DOMXPath :

$doc = new DOMDocument() ;
$doc->load('xml/poste.xml') ;
$doc->preserveWhiteSpace = false;
$butcher = new DOMXPath($doc) ;

$meet = $butcher->query('//*') ;
assert($meet->length == 5) ;

$meet = $butcher->query('//root/*') ;
assert($meet->length == 2) ;

Note que c'est un peut le bazooka d'utiliser XPath :

$meet $doc->getElementsByTagName('root')->item(0)->getElementsByTagName('item') ;

Aussi je n'arrive pas à utiliser la méthode getElementsByTagName.


[...]

J'obtiens cette erreur, comme si l'objet renvoyé par getElementsByTagName
n'était pas un noeud xml :

Notice: Undefined property: DOMNodeList::$nodeName (etc...)


Comme l'indique la documentation, comme le suppose le nom de la
fonction, et comme l'indique le message d'erreur, c'est un objet
DOMNodeList qui est renvoyé ;)

echo $tmp->item(0)->nodeName ;
echo $tmp->item(1)->nodeName ;

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

taupe
Le #941038
$doc->preserveWhiteSpace = false;


Voila c'est ce que je cherchais.
Merci.

Publicité
Poster une réponse
Anonyme