【发布时间】: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父元素 (<PageMap>)。
这就是我卡住的地方。
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" } } }
谁能解释我做错了什么
谢谢
【问题讨论】:
-
SimpleXMLElement 中的 Xpath 总是 一个数组。这与记录中的一样:php.net/simplexmlelement.xpath - 但是带有 DOMXPath 对象的姊妹库 DOMDocuement 允许您直接从 DOM 获取字符串值:php.net/manual/en/domxpath.evaluate.php
标签: php xml for-loop xpath google-custom-search