【问题标题】:cannot retrive the value from xpath where id is defined无法从定义 id 的 xpath 检索值
【发布时间】:2012-05-16 19:28:30
【问题描述】:

我正在尝试从yql生成的xml中从span中获取id为“yfs_a00_xauusd=x”的数据..

我试过这个..但结果是

问: true http://finance.yahoo.com/q?s=XAGUSD%3DX&ql=1 613 600 27426 28.3600 我只想抢 28.3600

<?php
session_start();
$yql_base_url = "http://query.yahooapis.com/v1/public/yql";  
$xpath='//*[@id="yfs_g00_xagusd=x"]';
$url = 'http://finance.yahoo.com/q?s=XAGUSD%3DX&ql=1';
$yql_query = "select * from html where url=$url and xpath = $xpath;";  
$yql_query_url = $yql_base_url . "?q=" . urlencode($yql_query);
$yql_query_url .= "&env=http://datatables.org/alltables.env";
$yql_query_url .= "&format=json";
$session = curl_init($yql_query_url);  
curl_setopt($session, CURLOPT_RETURNTRANSFER,true);      
$json = curl_exec($session);
$phpObj =  json_decode($json);  

if(!is_null($phpObj->query->results->span)){  
    foreach($phpObj->query->results->span as $result){  
        $_SESSION['price'] = $result;
  }  
}  
?>


<div> Ask:<?php echo $_SESSION['span'];?> </div>

yahoo生成的XML是....

<query yahoo:count="1" yahoo:created="2012-05-16T19:00:25Z" yahoo:lang="en-US">
  <diagnostics>
    <publiclyCallable>true</publiclyCallable>
    <url execution-start-time="1" execution-stop-time="601" execution-time="600" proxy="DEFAULT">http://finance.yahoo.com/q?s=XAGUSD%3DX&ql=1</url>
    <user-time>613</user-time>
    <service-time>600</service-time>
    <build-version>27426</build-version>
  </diagnostics>
  <results><span id="yfs_g00_xagusd=x">28.3600</span></results>
</query>

非常感谢您的帮助.. 提前致谢。

【问题讨论】:

    标签: php yql


    【解决方案1】:

    您的查询已损坏,应引用这些值。

    $yql_query = "select * from html where url='$url' and xpath='$xpath';";
    

    或者更好的是,通过查询参数提供这些值。

    $yql_query = "select * from html where url=@url and xpath=@xpath;";
    $params = array(
         'q'      => $yql_query,
         'url'    => $url,
         'xpath'  => $xpath,
         'env'    => 'http://datatables.org/alltables.env',
         'format' => 'json',
    );
    $yql_query_url = $yql_base_url . '?' . http_build_query($params);
    

    一旦您让 YQL 返回您真正想要的结果,您正在寻找的价格将可用。

    $phpObj->query->results->span->content
    

    a running example

    【讨论】:

    • 非常感谢您..您可能甚至无法想象您对我的帮助..我已经搜索了一个月..再次非常感谢..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多