【问题标题】:PHP SimpleXml - Retrieving attributes of namespaced childrenPHP SimpleXml - 检索命名空间子项的属性
【发布时间】:2012-05-19 07:40:52
【问题描述】:

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

$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'];
  }
}

除了命名空间子项的属性检索之外的一切工作正常 - 如果孩子的标记名没有命名空间,它工作正常。如果抓取节点值(而不是属性),即使是命名空间,它也可以正常工作。我错过了什么?

【问题讨论】:

  • 投反对票至少应该有解释...

标签: php xml xml-parsing simplexml xml-namespaces


【解决方案1】:

试试这个

    $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/>";
        }
    }

【讨论】:

    【解决方案2】:

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

    echo $o->attributes()->date;
    

    【讨论】:

      猜你喜欢
      • 2014-06-15
      • 2011-06-08
      • 2012-11-10
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 2012-01-06
      相关资源
      最近更新 更多