php simplexmlelement,php simplexmlElement操作xml的命名空间实现代码

看了这个问题,第一个反应就是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 函数 相关资料

https://www.jb51.net/w3school/php/php_ref_simplexml.htmPHP SimpleXML

https://www.jb51.net/w3school/php/php_xml_simplexml.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值