Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用变量解析带有PHP XPath的xml提要_Php_Variables_Xpath - Fatal编程技术网

使用变量解析带有PHP XPath的xml提要

使用变量解析带有PHP XPath的xml提要,php,variables,xpath,Php,Variables,Xpath,我在使用PHPXPath获取基于登录客户端所在国家/地区的汇率时遇到问题 仅供参考:是一个php类,用于使用XPath搜索XML文档 我有一个数据库,里面有所有的客户、国家和相关的货币价值 到目前为止,我用于获取利率(从ECB提要)的代码如下: 现在,我想传递一个变量作为货币值(上面例子中的美元)。 我的问题是,因为我对XPath完全不熟悉,所以语法就是这样做的。假设变量名为 $user_data->GRUPPO_005 我尝试了以下解决方案,但不断出现“意外T_变量”错误: 我想这是因

我在使用PHPXPath获取基于登录客户端所在国家/地区的汇率时遇到问题

仅供参考:是一个php类,用于使用XPath搜索XML文档

我有一个数据库,里面有所有的客户、国家和相关的货币价值

到目前为止,我用于获取利率(从ECB提要)的代码如下:

现在,我想传递一个变量作为货币值(上面例子中的美元)。 我的问题是,因为我对XPath完全不熟悉,所以语法就是这样做的。假设变量名为

$user_data->GRUPPO_005
我尝试了以下解决方案,但不断出现“意外T_变量”错误:


我想这是因为我对这门语言的知识不多,我很想知道一点。

好的,我不知道PHPXPath是什么,但是因为你似乎在组装字符串时遇到了麻烦,试试看

$Rates->getAttributes(
    sprintf('//Cube[@currency="%s"]', $user_data->GRUPPO_005),
    'rate'
);


顺便说一句,这里有一个,因此您只需使用它就可以省去编写自己的查询工具的麻烦。

虽然您的问题可能已经解决,但我将为ecb.int提供一些替代代码,以防您或其他用户需要收集更新的利率

    function getCurrencyRates( $url ){
      $doc = new DOMDocument();
      ini_set('display_errors','Off'); 
      $doc->load( $url );
      ini_set('display_errors','On'); 
      $list = $doc->getElementsByTagName( 'Cube' );

      foreach( $list as $node )
        if( $node->getAttribute( 'currency' ) )
          $rates[
            strtoupper( $node->getAttribute( 'currency' ) )] =
            floatval( $node->getAttribute( 'rate' ) );

      return $rates;
    }

    $url = 'http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml';
    $currencies_array=getCurrencyRates( $url );

    if($currencies_array > ''){
      reset($currencies_array);
    }

    if($currencies_array['USD'] > 0)
    {
      $eurtousd = 1 / $currencies_array['USD'];
    }

    if($eurtousd > 0)
    {

        $sql_update_currencies=mysql_query("UPDATE currencies SET per1usdollar='" . $eurtousd . "', lastupdated=now() WHERE iso='EUR'");

        if($sql_update_currencies){}
    }
。。。并继续使用您希望更新的其他货币。 您甚至可以通过对至少输入一次的货币的ISO代码进行分组来执行自动循环

    $sql_rates_cycle=mysql_query("SELECT iso FROM currencies group BY iso ORDER BY iso ASC");

    while(list($iso)=mysql_fetch_row($sql_rates_cycle))
    {
       //...Put code here similar to that above, 
       //using the variable $iso in place of 'USD'
    }

您可能希望添加一个到PHPXPath的链接,以便人们知道您在谈论什么
$userRate=$Rates->getAttributes(“//Cube[@currency={$user\u data->GRUPPO\u 005}]”,即“rate”)应该对我有用。我想这是因为你不能让绳子逃脱(出于某种原因)。非常感谢,这很容易奏效。另外,梨子包装上的提示是天赐的提示。@Matteo不客气。另一方面,PHP也有许多非常强大的本机包来处理XML。还请注意,变量绑定是XPath上下文的一部分,正确的XPath引擎应该支持注册它。@Alejandro-hmmm,但我不知道如何从任何PHP扩展中使用它。
    function getCurrencyRates( $url ){
      $doc = new DOMDocument();
      ini_set('display_errors','Off'); 
      $doc->load( $url );
      ini_set('display_errors','On'); 
      $list = $doc->getElementsByTagName( 'Cube' );

      foreach( $list as $node )
        if( $node->getAttribute( 'currency' ) )
          $rates[
            strtoupper( $node->getAttribute( 'currency' ) )] =
            floatval( $node->getAttribute( 'rate' ) );

      return $rates;
    }

    $url = 'http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml';
    $currencies_array=getCurrencyRates( $url );

    if($currencies_array > ''){
      reset($currencies_array);
    }

    if($currencies_array['USD'] > 0)
    {
      $eurtousd = 1 / $currencies_array['USD'];
    }

    if($eurtousd > 0)
    {

        $sql_update_currencies=mysql_query("UPDATE currencies SET per1usdollar='" . $eurtousd . "', lastupdated=now() WHERE iso='EUR'");

        if($sql_update_currencies){}
    }
    $sql_rates_cycle=mysql_query("SELECT iso FROM currencies group BY iso ORDER BY iso ASC");

    while(list($iso)=mysql_fetch_row($sql_rates_cycle))
    {
       //...Put code here similar to that above, 
       //using the variable $iso in place of 'USD'
    }