看了這個問題,第一個反應就是namespace的關係,但我從來沒有使用simplexml操作過namespace,於是就翻開手冊查了一下資料,問題並沒有解決,最終是通過google解決了該問題。
提問題的朋友貼出了資料來源,來自於:http://code.google.com/intl/zh-CN/apis/contacts/docs/3.0/developers_guide_protocol.html#retrieving_without_query,資料結構大致如下:
複製代碼 代碼如下:
liz@gmail.com
2008-12-10T10:04:15.446Z
Elizabeth Bennet's Contacts
Elizabeth Bennet
liz@gmail.com
Contacts
1
1
25
http://www.google.com/m8/feeds/contacts/liz%40gmail.com/base/c9012de
2008-12-10T04:45:03.331Z
2008-12-10T04:45:03.331Z
Fitzwilliam Darcy
Fitzwilliam Darcy
456
這個結構在上面的地址裡有,這個是我格式化過的XML資料,現在要取得類似於“ 456 ”中的值。
最終代碼如下:
複製代碼 代碼如下:
$x = new SimpleXmlElement($str);
foreach($x->entry as $t){
echo $t->id . "
";
echo $t->updated . "
";
$namespaces = $t->getNameSpaces(true);
$gd = $t->children($namespaces['gd']);
echo $gd->phoneNumber;
}
當然,如果不象上面這樣寫,也可以寫成這樣:
複製代碼 代碼如下:
$x = new SimpleXmlElement($str);
foreach($x->entry as $t){
echo $t->id . "
";
echo $t->updated . "
";
//$namespaces = $t->getNameSpaces(true);
//注意這裡與上面一段的區別
$gd = $t->children('http://schemas.google.com/g/2005');
echo $gd->phoneNumber;
}
只是象第二種寫法就屬於寫入程式碼了,這樣不太好,萬一哪天有變化,還得再更改N多代碼。
問題接踵而來,比如象下面這段:
複製代碼 代碼如下:
Learn QB in Minutes
9
02/12/2009
02/12/2009
11
30
NOT_INPROGRESS
PUBLIC
這種非標準的XML,沒有定義命名空間,怎麼辦?在這種情況下,其實SimpleXmlElement就已經直接可以解決了,但是會報warnging,因為他認為event這個命名空間不存在。
解決方案是:
複製代碼 代碼如下:
$xml = @new SimpleXmlElement($str);//在前面加@抑止錯誤。
echo "
";
print_r($xml);
目前看來,這種解決方案比較好。
PHP SimpleXML 函數 相關資料
http://www.jb51.net/w3school/php/php_ref_simplexml.htm
PHP SimpleXML
http://www.jb51.net/w3school/php/php_xml_simplexml.htmhttp://www.bkjia.com/PHPjc/322686.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/322686.htmlTechArticle看了這個問題,第一個反應就是namespace的關係,但我從來沒有使用simplexml操作過namespace,於是就翻開手冊查了一下資料,問題並沒有解決,...