Discussion:
XML DomDocument et "ignoreWhite"
(trop ancien pour répondre)
taupe
2008-01-28 18:07:38 UTC
Permalink
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
Mickael Wolff
2008-01-30 08:10:19 UTC
Permalink
Bonjour,
Post by taupe
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
Ben non, il ne les ajoute pas. Ils sont bien là. Ce sont des nœuds qui
doivent être données.
Post by taupe
... 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.
Post by taupe
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') ;
Post by taupe
Aussi je n'arrive pas à utiliser la méthode getElementsByTagName.
[...]
Post by taupe
J'obtiens cette erreur, comme si l'objet renvoyé par getElementsByTagName
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
2008-01-31 11:52:43 UTC
Permalink
Post by Mickael Wolff
$doc->preserveWhiteSpace = false;
Voila c'est ce que je cherchais.
Merci.

Continuer la lecture sur narkive:
Loading...