【问题标题】:Getting an xml element value using xpath使用 xpath 获取 xml 元素值
【发布时间】:2014-08-09 20:22:16
【问题描述】:

我正在解析来自 google xml 搜索结果提要的 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'];
}

我得到的问题是我试图抓取的图像并不总是在第四个DataObject。 xml 搜索结果提要可以只有一个或多个DataObject elements.

所以我做了一些阅读,发现 xpath 将使我能够定位正确的 DataObject 宽度、type 的属性和 cse_thumbnail 的值,而不管一个内存在多少 DataOjects父元素 (&lt;PageMap&gt;)。

这就是我卡住的地方。

foreach ($xml->RES->R as $item) {
          $image = $item->PageMap->xpath('DataObject[@type="cse_thumbnail"]/Attribute[@name="src"]/@value');

}

$image 变量以数组形式返回。我以为它会从&lt;Attribute&gt; 那里返回name="src" 的值。

array(1) { [0]=&gt; object(SimpleXMLElement)#14 (1) { ["@attributes"]=&gt; array(1) { ["value"]=&gt; string(110) "https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTZMcIvtnauaF5yVIAcxEsJgj-r78xsi32b18X5tuMamDZIVWNBTXoB-g" } } }

谁能解释我做错了什么

谢谢

【问题讨论】:

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


【解决方案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'];    
   }    
}

【讨论】:

  • 感谢完美的工作,感谢您的链接
猜你喜欢
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 2022-12-18
相关资源
最近更新 更多