首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP SimpleXml -检索名称空间化子对象的属性

PHP SimpleXml -检索名称空间化子对象的属性
EN

Stack Overflow用户
提问于 2012-05-19 15:40:52
回答 2查看 202关注 0票数 0

我正在解析一个外部Atom提要,一些条目有一个名称空间子项的集合-我无法从这些子项中检索属性。缩略示例:

代码语言:javascript
复制
$feed = <<<EOD
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:ai="http://activeinterface.com/thincms/2012">
  <entry>
    <title>Some Title</title>
    <ai:image>path/to/some/image</ai:image>
    <ai:ocurrence dateid="20120622" date="Fri, June 22, 2012" time="6:00 pm" />
    <ai:ocurrence dateid="20120720" date="Fri, July 20, 2012" time="6:00 pm" />
  </entry>
</feed>
EOD;


$xml = new SimpleXmlElement($feed);
foreach ($xml->entry as $entry){
  echo $entry->title;
  $namespaces = $entry->getNameSpaces(true);
  $ai = $entry->children($namespaces['ai']);
  echo $ai->image;
  foreach($ai->ocurrence as $o){
    echo $o['date'];
  }
}

除了有名称空间的子代的属性检索之外,其他一切都可以正常工作-如果子代的标记名没有名称空间,它就可以正常工作。如果获取节点值(而不是属性),即使名称空间已设置,它也能正常工作。我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-19 16:03:20

尝尝这个

代码语言:javascript
复制
    $xml = new SimpleXmlElement($feed);
    foreach ($xml->entry as $entry)
    {

        $namespaces = $entry->getNameSpaces(true);
        $ai = $entry->children($namespaces['ai']);

        foreach ($ai->ocurrence as $o)
        {
            $date=$o->attributes();
            echo $date['date'];
            echo "<br/>";
        }
    }
票数 0
EN

Stack Overflow用户

发布于 2012-05-19 15:49:39

不知道为什么,但显然数组访问在这里不起作用...需要attributes方法:

代码语言:javascript
复制
echo $o->attributes()->date;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10663318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档