2013-06-23 5 views

Répondre

6

Selon le manuel PHP, ces deux paramètres ont été ajoutés dans PHP version 5.2. Le changelog officiel de PHP 5 ne note pas explicitement ces changements mais the PHP 5.2 update readme has these.

ensuite regarder dans la source 5.2 pour le constructeur (in lxr), il montre que cela est lié à l'itérateur:

sxe->iter.nsprefix = ns_len ? xmlStrdup((xmlChar *)ns) : NULL; 
sxe->iter.isprefix = isprefix; 

Je suppose que ces deux spécifient l'espace de noms XML qui SimpleXMLElement va itérer sur par défaut. Un petit test peut vérifier ceci:

$xml = new SimpleXMLElement(
    '<root><a/><b/><c/></root>' 
); 

var_dump(count(iterator_to_array($xml))); #int(3) 

Par défaut, l'itérateur a trois éléments ici: a, b et c. la mise en maintenant les paramètres spécifiant l'itération d'être sur une autre XML Namespace que celui par défaut change ceci:

$xml = new SimpleXMLElement(
    '<root><a/><b/><c/></root>', 0, FALSE, "ns:1" 
); 

var_dump(count(iterator_to_array($xml))); #int(0) 

L'itération a maintenant zéro éléments parce que la racine élément n'a pas d'éléments enfant dans l'espace de noms d'URI ns:1.

Modification de l'espace de noms de l'élément racine ns:1 sera à nouveau révéler trois éléments parce que maintenant ces trois enfants-éléments sont dans cet espace de noms, ils héritent de leurs parents:

$xml = new SimpleXMLElement(
    '<root xmlns="ns:1"><a/><b/><c/></root>', 0, FALSE, "ns:1" 
); 

var_dump(count(iterator_to_array($xml))); #int(3) 

comme si les enfants se sont dans l'espace de noms spécifié par cette paire de paramètres et via un préfixe sur ces éléments:

$xml = new SimpleXMLElement(
    '<root xmlns:n="ns:1"><n:a/><n:b/><n:c/></root>', 0, FALSE, "ns:1" 
); 

var_dump(count(iterator_to_array($xml))); #int(3) 
+0

Vous feriez bien si vous mettez cette réponse dans les commentaires de php.net. Parce qu'il n'y a aucun moyen de le savoir. Ils n'ont rien écrit ... vraiment. –

Questions connexes