我似乎无法解析出有机关键字的度量。我使用simplexml_load_string加载整个响应字符串,然后当我打印对象时,我可以看到:
[0] => SimpleXMLElement Object
(
[id] => http://www.google.com/analytics/feeds/data?ids=ga:480&ga:keyword=cats&start-date=2011-04-10&end-date=2011-07-24
[updated] => 2011-07-23T17:00:00.001-07:00
[title] => ga:keyword=cats
[link] => SimpleXMLElement Object
(
[@attributes] => Array
(
[rel] => alternate
[type] => text/html
[href] => http://www.google.com/analytics
)
)
)
但当我查看实际的(预格式化的)响应时,我看到了一些无法保存格式的额外数据:
<entry gd:etag="W/"hdSFEs."" gd:kind="analytics#datarow">
<id>http://www.google.com/analytics/feeds/data?ids=ga:430&ga:keyword=cats&start-date=2011-04-10&end-date=2011-07-24</id>
<updated>2011-07-23T17:00:00.001-07:00</updated>
<title>ga:keyword=cats</title>
<link rel="alternate" type="text/html" href="http://www.google.com/analytics"/>
<dxp:dimension name="ga:keyword" value="cats"/>
<dxp:metric confidenceInterval="0.0" name="ga:organicSearches" type="integer" value="2"/>
</entry>
我需要底部的度量值,在这种情况下是2。我怎样才能拿到它?
谢谢!
编辑: Arend是对的,问题只是SimpleXML奇怪地处理了命名空间
您可能需要将整个XML响应传递给SimpleXMLElement()构造函数,而不仅仅是此处提供的片段。特别需要<feed>
元素,因为它有名称空间声明:
<feed xmlns='http://www.w3.org/2005/Atom' xmlns:dxp='http://schemas.google.com/analytics/2009' xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' xmlns:gd='http://schemas.google.com/g/2005' gd:etag='W/"DUINSHcycSp7I2A9WxRWFEQ."' gd:kind='analytics#data'>
<entry gd:etag="W/"hdSFEs."" gd:kind="analytics#datarow">
<id>http://www.google.com/analytics/feeds/data?ids=ga:430&ga:keyword=cats&start-date=2011-04-10&end-date=2011-07-24</id>
<updated>2011-07-23T17:00:00.001-07:00</updated>
<title>ga:keyword=cats</title>
<link rel="alternate" type="text/html" href="http://www.google.com/analytics"/>
<dxp:dimension name="ga:keyword" value="cats"/>
<dxp:metric confidenceInterval="0.0" name="ga:organicSearches" type="integer" value="2"/>
</entry>
</feed>
如果没有这些名称空间声明,XML库似乎正在删除任何名称空间的属性或元素(如<dxp:metric>
)。
您还可能从不同版本的XML库中获得不同的结果。在我的系统中,您的代码片段生成了一个包含所有属性和元素(包括<metric>
)的SimpleXMLElement,尽管我确实收到了一些PHP警告,抱怨缺少命名空间声明。
编辑:简单的方法是:
var_dump($object->xpath('dxp:metric'));
问题是simplexml有一个带有命名空间的"gotcha"。作为kudo对松鼠的回应,您确实需要使用名称空间,但我有一种预感,您只发布了xml响应的一部分,而不是整个响应。
这里有一篇关于它的精彩帖子:http://blogs.sitepoint.com/simplexml-and-namespaces/
为了获取度量值(以及度量本身),您可以从这段代码开始。
var_dump($object->children('http://schemas.google.com/analytics/2009'));
请注意,其中有一些属性再次位于不同的命名空间中。
其余的问题也在这里得到了回答:使用SimpleXML