欧洲中央银行提供来自欧元的XML document for currency exchange rates依赖项。
<?xml version="1.0" encoding="UTF-8"?>
<gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
<gesmes:subject>Reference rates</gesmes:subject>
<gesmes:Sender>
<gesmes:name>European Central Bank</gesmes:name>
</gesmes:Sender>
<Cube>
<Cube time='2015-09-17'>
<Cube currency='USD' rate='1.1312'/>
<Cube currency='JPY' rate='136.76'/>
<Cube currency='BGN' rate='1.9558'/>
...
</Cube>
</Cube>
</gesmes:Envelope>
我已将这个XML文件存储为货币汇率提供商的测试用例,因为我想为其编写解析器。
我想使用phpstorm的Evaluate XPath...
功能。
但是它似乎并没有认识到名称空间。因此找不到与//Cube
匹配的内容。
我也尝试使用Show unique XPath
,对我来说,它显示
/gesmes:Envelope/e:Cube/e:Cube/e:Cube/@rate
然而,用它来评估收益却没有任何回应。
我想我的配置错误(当我尝试编辑上下文时,我不知道自己在做什么)。
如何设置正确的名称空间?
参考方案
您在Xpath表达式中为名称空间e
使用了前缀http://www.ecb.int/vocabulary/2002-08-01/eurofxref
,但为其配置了前缀c
。
您无需使用PHP为其编写解析器。只需使用DOM + Xpath。
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
$xpath->registerNamespace('gesmes', 'http://www.gesmes.org/xml/2002-08-01');
$xpath->registerNamespace('e', 'http://www.ecb.int/vocabulary/2002-08-01/eurofxref');
$time = $xpath->evaluate('string(/gesmes:Envelope/e:Cube/e:Cube/@time)');
$rates = [];
foreach ($xpath->evaluate('/gesmes:Envelope/e:Cube/e:Cube/e:Cube') as $cube) {
$rates[$cube->getAttribute('currency')] = $cube->getAttribute('rate');
}
var_dump($time, $rates);
输出:
string(10) "2015-09-22"
array(31) {
["USD"]=>
string(6) "1.1155"
["JPY"]=>
string(6) "133.75"
["BGN"]=>
string(6) "1.9558"
["CZK"]=>
string(6) "27.057"
["DKK"]=> ...
PHP:将数组值加在一起 - php我相信这比标题听起来要难一些,但我可能完全错了。我有一个像这样的数组:[["londrina",15],["cascavel",34],["londrina",23],['tiradentes',34],['tiradentes',21]] 我希望能够采用通用…
PHP JQuery复选框 - php我有以下片段。 var myData = { video: $("input[name='video[]']:checked").serialize(), sinopse: $("#sinopse").val(), dia: $("#dia").val(), quem: $(…
PHP:对数组排序 - php请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…
转义字符无法正常工作 - php我试图在PHP中创建html内容,并且为onclick事件提供了一个名为uchat的div函数。该函数采用一个字符串的名称参数。如下所示:$name = "Php string"; $echostr .= "<div onClick='uchat(\'$name\')'> &l…
PHP-复选框组 - php我有一个需要发布的表单复选框组。<input type="checkbox" value="true" checked name="chk0[]"> <input type="checkbox" value="false" name=…