2017-05-25 3 views
1

私は中央銀行からデータを取得しようとしていますが、それを解決することはできません。 (。とOFC彼らはサポートを提供していません...)PHPのstr_replaceが動作しないようです

$client = new SoapClient("http://www.mnb.hu/arfolyamok.asmx?wsdl",array('trace' => 1)); 
$xml = new SimpleXMLElement($client->GetCurrentExchangeRates()->GetCurrentExchangeRatesResult); 
echo $client->GetCurrentExchangeRates()->GetCurrentExchangeRatesResult; 
echo (string)htmlentities($client->__getLastResponse()); 

そして、私はこのためだ結果は次のとおりです。

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
<s:Body> 
<GetCurrentExchangeRatesResponse xmlns="http://www.mnb.hu/webservices/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <GetCurrentExchangeRatesResult> 
    &lt;MNBCurrentExchangeRates&gt; 
     &lt;Day date="2017-05-25"&gt; 
     &lt;Rate unit="1" curr="AUD"&gt;204,7&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="BGN"&gt;157,51&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="BRL"&gt;83,66&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="CAD"&gt;204,06&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="CHF"&gt;282,21&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="CNY"&gt;39,89&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="CZK"&gt;11,65&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="DKK"&gt;41,4&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="EUR"&gt;308,06&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="GBP"&gt;355,61&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="HKD"&gt;35,17&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="HRK"&gt;41,48&lt;/Rate&gt; 
     &lt;Rate unit="100" curr="IDR"&gt;2,06&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="ILS"&gt;76,56&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="INR"&gt;4,24&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="ISK"&gt;2,73&lt;/Rate&gt; 
     &lt;Rate unit="100" curr="JPY"&gt;245,13&lt;/Rate&gt; 
     &lt;Rate unit="100" curr="KRW"&gt;24,49&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="MXN"&gt;14,89&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="MYR"&gt;64,07&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="NOK"&gt;32,92&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="NZD"&gt;192,59&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="PHP"&gt;5,5&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="PLN"&gt;73,67&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="RON"&gt;67,7&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="RSD"&gt;2,51&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="RUB"&gt;4,88&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="SEK"&gt;31,68&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="SGD"&gt;197,91&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="THB"&gt;8,01&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="TRY"&gt;76,91&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="UAH"&gt;10,43&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="USD"&gt;274,03&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="ZAR"&gt;21,23&lt;/Rate&gt; 
     &lt;/Day&gt; 
    &lt;/MNBCurrentExchangeRates&gt; 
    </GetCurrentExchangeRatesResult> 
</GetCurrentExchangeRatesResponse> 

処理のための非常に素晴らしいされていません。

$res = (string)htmlentities($client->__getLastResponse()); 
$res = str_replace("&lt;", "<", $res); 
$res = str_replace("&gt;", ">", $res); 
echo $res; 

をそして、いくつかの理由で、結果は次のとおりです:だから私は使用奇妙な以上のものです

&lt;MNBCurrentExchangeRates&gt; 
      &lt;Day date="2017-05-25"&gt; 
      &lt;Rate unit="1" curr="AUD"&gt;204,7&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="BGN"&gt;157,51&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="BRL"&gt;83,66&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="CAD"&gt;204,06&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="CHF"&gt;282,21&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="CNY"&gt;39,89&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="CZK"&gt;11,65&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="DKK"&gt;41,4&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="EUR"&gt;308,06&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="GBP"&gt;355,61&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="HKD"&gt;35,17&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="HRK"&gt;41,48&lt;/Rate&gt; 
      &lt;Rate unit="100" curr="IDR"&gt;2,06&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="ILS"&gt;76,56&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="INR"&gt;4,24&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="ISK"&gt;2,73&lt;/Rate&gt; 
      &lt;Rate unit="100" curr="JPY"&gt;245,13&lt;/Rate&gt; 
      &lt;Rate unit="100" curr="KRW"&gt;24,49&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="MXN"&gt;14,89&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="MYR"&gt;64,07&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="NOK"&gt;32,92&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="NZD"&gt;192,59&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="PHP"&gt;5,5&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="PLN"&gt;73,67&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="RON"&gt;67,7&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="RSD"&gt;2,51&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="RUB"&gt;4,88&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="SEK"&gt;31,68&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="SGD"&gt;197,91&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="THB"&gt;8,01&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="TRY"&gt;76,91&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="UAH"&gt;10,43&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="USD"&gt;274,03&lt;/Rate&gt; 
      &lt;Rate unit="1" curr="ZAR"&gt;21,23&lt;/Rate&gt; 
      &lt;/Day&gt; 
     &lt;/MNBCurrentExchangeRates&gt; 

。私はこれらのltとgtコードをクリアしたかったのですが、代わりに出力から<部分を失いました。私はsimplexmlでデータを取得したかったのですが、出力に関係なくfalseを返します。これは私が使用したいコードですが、$ xmlの争いは "false"なので、今度はエラーメッセージを表示します。

$xml = simplexml_load_string((string)$res); 

    var_dump($xml); 

    foreach($xml->xpath('//Day') as $header) { 
    echo (string)$header->Rate; 
    } 

(それは実際に私は少しだけを片付け、1行の結果XMLSを与えます。)

答えて

0

Try this code snippet here

<?php 

ini_set('display_errors', 1); 

$string = <<<HTML 

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
<s:Body> 
<GetCurrentExchangeRatesResponse xmlns="http://www.mnb.hu/webservices/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <GetCurrentExchangeRatesResult> 
    &lt;MNBCurrentExchangeRates&gt; 
     &lt;Day date="2017-05-25"&gt; 
     &lt;Rate unit="1" curr="AUD"&gt;204,7&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="BGN"&gt;157,51&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="BRL"&gt;83,66&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="CAD"&gt;204,06&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="CHF"&gt;282,21&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="CNY"&gt;39,89&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="CZK"&gt;11,65&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="DKK"&gt;41,4&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="EUR"&gt;308,06&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="GBP"&gt;355,61&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="HKD"&gt;35,17&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="HRK"&gt;41,48&lt;/Rate&gt; 
     &lt;Rate unit="100" curr="IDR"&gt;2,06&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="ILS"&gt;76,56&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="INR"&gt;4,24&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="ISK"&gt;2,73&lt;/Rate&gt; 
     &lt;Rate unit="100" curr="JPY"&gt;245,13&lt;/Rate&gt; 
     &lt;Rate unit="100" curr="KRW"&gt;24,49&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="MXN"&gt;14,89&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="MYR"&gt;64,07&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="NOK"&gt;32,92&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="NZD"&gt;192,59&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="PHP"&gt;5,5&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="PLN"&gt;73,67&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="RON"&gt;67,7&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="RSD"&gt;2,51&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="RUB"&gt;4,88&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="SEK"&gt;31,68&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="SGD"&gt;197,91&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="THB"&gt;8,01&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="TRY"&gt;76,91&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="UAH"&gt;10,43&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="USD"&gt;274,03&lt;/Rate&gt; 
     &lt;Rate unit="1" curr="ZAR"&gt;21,23&lt;/Rate&gt; 
     &lt;/Day&gt; 
    &lt;/MNBCurrentExchangeRates&gt; 
    </GetCurrentExchangeRatesResult> 
</GetCurrentExchangeRatesResponse> 
</s:Body> 
</s:Envelope> 
HTML; 
$xml= html_entity_decode($string); 

$domDocument = new DOMDocument(); 
$domDocument->loadXML($xml); 
$results=$domDocument->getElementsByTagName("Day"); 
foreach($results->item(0)->childNodes as $node) 
{ 
    if($node instanceof DOMElement) 
    { 
     echo $node->nodeValue; 
    } 
} 
+0

私はそれが何をするかわからないんだけど、それは戻っています一列に並んだ数字だけ。 待ちに待ったと思います。しかし、最後のエコーは新しいラインを持たないので、見るのは難しいです。私に数分を与えてください。 これは完璧に動作します、ありがとうございます! – kry

+0

@kry疑問がある場合は、https://eval.in/805373 –

+0

を確認してください。次の目標はアトリビュートを取得することでしたが、DOM Documentはすでにそれを行っていました。今私は仕事の数日前です。 :) – kry

関連する問題