使用xpath获取xml元素值

时间:2014-06-19 10:17:39

标签: php xml for-loop xpath google-custom-search

我正在从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属性typecse_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" } } }

任何人都可以解释我做错了什么

由于

1 个答案:

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