不知道该怎么称呼它,所以我会很快详细说明。
我有一个我正在尝试使用YQL控制台构建的屏幕抓取工具。该查询为用户提供了 XML 或 JSON 的选择。我的目标是控制台的 YQL>data>html 方面,并选择 XML 作为我的输出格式。
我的 YQL 查询:
这将为您提供 XML 格式的 Google.com 文档树的读数。太多输出无法粘贴到这篇文章中,所以只需单击链接。
我的问题来自于使用 PHP 遍历 XML 树以正确显示此请求的输出。我不知道如何有效地创建一个 foreach 语句(或任何其他语句)来有效地抓取 XML 输出并收集文档树并根据我自己的需要重新显示它。
我的PHP:
$searchUrl = "google.com";
if(isset($_REQUEST['searchUrl'])) {
$searchUrl = $_REQUEST['searchUrl'];
}
$query = "select * from html where url=\"http://".$searchUrl."\"";
$url = "http://query.yahooapis.com/v1/public/yql";
// Get Subcategory Article Data
$parameterData = "q=".urlencode($query);
$parameterData .= "&diagnostics=true";
// setup CURL
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameterData);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
// send
$response = trim(urldecode(curl_exec($ch)));
// parse response
$xmlObjects = @simplexml_load_string($response);
foreach ($xmlObjects->diagnostics as $diagnostics) {
echo "<a href=".$diagnostics->url." target='_blank'>".$diagnostics->url."</a>";
}
foreach ($xmlObjects->results as $result) {
// here is where I would go echo $result->body or something along those lines
}
我想我在这一点上有点难过,因为我不知道下一步该去哪里导航这种格式的 XML 树。在query>results>body
XML 之后,我不确定在哪里收集剩余的对象,并将其输出到我的文档中的pre
标签或类似的东西中。
我想提供一个输入字段供用户输入自己的域,我的 PHP 将提交查询,迭代响应,并将文档树返回给用户以进行 HTML 查看和调试。
在迭代大量具有相同内部结构(如 RSS 提要或类似性质的东西)的父元素的上下文中,我熟悉 PHP 和 XML。在本例中,我正在处理一个动态 XML 树、一个大型响应对象和一个波动的内部结构。