php simplexml 节点名,php – 如何使用SimpleXML获取带有命名空间的节点的属性?

你在问题中得到的代码确实有效.您已经正确地编写了可以通过使用带有XML命名空间相关参数$ns和$is_prefix的

SimpleXMLElement::children() method来从不在默认命名空间中的namespaced-element访问属性作为根元素:

$youtube->entry->children('yt', TRUE)->duration->attributes()->seconds; // is "1870"

由于这与您在问题中的基本相同,可以说您已经回答了自己的问题.与扩展的Online Demo #2相比.

答案很长:你在问题中得到的代码确实有效.您可以在此处在线交互式示例中找到示例XML和代码:Online Demo #1 – 它显示了具有不同PHP和LIBXML版本的结果.

码:

$buffer = '

';

$xml = new SimpleXMLElement($buffer);

echo "ibxml version: ", LIBXML_DOTTED_VERSION, "\n";

foreach ($xml->entry as $item)

{

//original comment: how to get seconds?

$namespaces = $item->getNameSpaces(true);

$yt = $item->children($namespaces['yt']);

$seconds = $yt->duration->attributes();

echo $seconds['seconds'], "\n"; // original comment: but doesn't work.

}

echo "done. should read 1870 one time.\n";

结果:

输出为5.3.26,5.4.16 – 5.5.0

ibxml version: 2.9.1

1870

done. should read 1870 one time.

输出为5.3.15 – 5.3.24,5.4.5 – 5.4.15

ibxml version: 2.8.0

1870

done. should read 1870 one time.

输出为5.1.2 – 5.3.14,5.4.0 – 5.4.4

ibxml version: 2.7.8

1870

done. should read 1870 one time.

从这个角度看,一切都很好.由于您没有给出任何具体的错误描述,因此很难说您的案例出了什么问题.您可能正在使用在您提出问题时过时的PHP版本,例如收到致命错误:

Fatal error: Call to undefined method SimpleXMLElement::getNameSpaces()

可能也是由于过时的libxml版本.根据测试,以下libxml版本适用于PHP 5.1.2-5.5.0:

> ibxml版本:2.9.1> ibxml版本:2.8.0> ibxml版本:2.7.8

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值