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