php simplexmlElement操作xml的命名空間實現代碼_PHP教程

來源:互聯網
上載者:User
看了這個問題,第一個反應就是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.htm

http://www.bkjia.com/PHPjc/322686.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/322686.htmlTechArticle看了這個問題,第一個反應就是namespace的關係,但我從來沒有使用simplexml操作過namespace,於是就翻開手冊查了一下資料,問題並沒有解決,...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.