2013-06-23 23 views

回答

6

根據PHP手冊,這兩個參數已被添加到PHP 5.2版中。官方的PHP 5更新日誌沒有明確指出這些更改,但是the PHP 5.2 update readme has these

然後尋找到了5.2源構造(in lxr)這表明,這是關係到迭代器:

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

所以我假定這兩個指定XML命名空間SimpleXMLElement將默認迭代。一個小測試可以驗證這一點:

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

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

默認情況下,迭代器在這裏有三個元素:a,b和c。現在設置指定迭代的參數是通過不同的XML命名空間不是默認的一個變化是:

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

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

迭代現在擁有的零個元素,因爲根元素沒有命名空間中的任何子元素的URI ns:1

更改根元素ns:1的命名空間將再次揭示了三個要素,因爲現在這三個子元素是該命名空間中,它們繼承了它從其父:

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

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

一樣的,如果孩子本身在參數對和通過這些元素的前綴指定的名稱空間中:

$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

如果您在php.net註釋中放入此答案,您會做得很好。因爲沒有辦法知道它。他們沒有寫任何......真的。 –