gmail.com/full/c9012de'' />
<gd:phoneNumber rel=''http://schemas.google.com/g/2005#home'' primary=''true''> 456 </gd:phoneNumber>
<gd:extendedProperty name=''pet'' value=''hamster'' />
<gContact:groupMembershipInfo deleted=''false'' href=''http://www.google.com/m8/feeds/groups/liz%40gmail.com/base/270f'' />
</entry>
</feed>
这个结构在上面的地址里有,这个是我格式化过的XML数据,现在要取得类似于“<gd:phoneNumber rel=''http://schemas.google.com/g/2005#home'' primary=''true''> 456 </gd:phoneNumber> ”中的值。
最终代码如下:
复制代码 代码如下:
$x = new SimpleXmlElement($str);
foreach($x->entry as $t){
echo $t->id . "<br >";
echo $t->updated . "<br />";
$namespaces = $t->getNameSpaces(true);
$gd = $t->children($namespaces[''gd'']);
echo $gd->phoneNumber;
}
当然,如果不象上面这样写,也可以写成这样:
复制代码 代码如下:
$x = new SimpleXmlElement($str);
foreach($x->entry as $t){
echo $t->id . "<br >";
echo $t->updated . "<br />";
//$namespaces = $t->getNameSpaces(true);
//注意这里与上面一段的区别
$gd = $t->children(''http://schemas.google.com/g/2005'');
echo $gd->phoneNumber;
}
只是象第二种写法就属于硬编码了,这样不太好,万一哪天有变化,还得再更改N多代码。
问题接踵而来,比如象下面这段:
复制代码 代码如下:
<event:event>
<event:sessionKey></event:sessionKey>
<event:sessionName>Learn QB in Minutes</event:sessionName>
<event:sessionType>9</event:sessionType>
<event:hostWebExID></event:hostWebExID>
<event:startDate>02/12/2009</event:startDate>
<event:endDate>02/12/2009</event:endDate>
<event:timeZoneID>11</event:timeZoneID>
<event:duration>30</event:duration>
<event:description></event:description>
<event:status>NOT_INPROGRESS</event:status>
<event:panelists></event:panelists>
<event:listStatus>PUBLIC</event:listStatus>
</event:event>
这种非标准的XML,没有定义命名空间,怎么办?在这种情况下,其实SimpleXmlElement就已经直接可以解决了,但是会报warnging,因为他认为event这个命名空间不存在。
解决方法是:
复制代码 代码如下:
$xml = @new SimpleXmlElement($str);//在前面加@抑止错误。
echo "<pre>";
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