我正在从Google xml搜索结果Feed中解析xml结果,并且我很难从特定的DataObject
元素中获取图像值
<DataObject type="cse_thumbnail">
<Attribute name="width" value="395"/>
<Attribute name="height" value="127"/>
<Attribute name="src" value="https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTZMcIvtnauaF5yVIAcxEsJgj-r78xsi32b18X5tuMamDZIVWNBTXoB-g"/>
</DataObject>
这是我目前的循环
foreach ($xml->RES->R as $item) {
$image = $item->PageMap->DataObject[4]->Attribute[2]['value'];
}
我得到的问题是我试图抓住的图像并不总是在第4 DataObject
页。 xml搜索结果Feed可以只有一个或多个DataObject elements.
所以我做了一点阅读,发现xpath会让我无法定位DataObject
属性type
和cse_thumbnail
的值,无论父元素(<PageMap>
)中存在多少DataOject。
这是我被卡住的地方。
foreach ($xml->RES->R as $item) {
$image = $item->PageMap->xpath('DataObject[@type="cse_thumbnail"]/Attribute[@name="src"]/@value');
}
$image
变量作为数组返回。我认为它会返回<Attribute>
name="src"
。
array(1) { [0]=> object(SimpleXMLElement)#14 (1) { ["@attributes"]=> array(1) { ["value"]=> string(110) "https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTZMcIvtnauaF5yVIAcxEsJgj-r78xsi32b18X5tuMamDZIVWNBTXoB-g" } } }
任何人都可以解释我做错了什么
由于
答案 0 :(得分:1)
您的xPath是正确的,您可以在线查看,例如: http://www.xpathtester.com/xpath
但是PageMap返回一个数组,请在此处查看此主题以寻找可能的解决方案: PHP Xpath extracting a value for a node with attribute name="author"
类似的东西:
foreach ($xml->RES->R as $item) {
$images = $item->PageMap->xpath('DataObject[@type="cse_thumbnail"]/Attribute[@name="src"]/@value');
if (count($images)) {
$image = (string) $images[0]['value'];
}
}