Чтение файла и запись в таблицу?

Получаю курсы валют с сайта Центробанка в формате XML, используя функцию, которая реализована здесь.

Пришла идея следующего плана: прочитать содержимое файла построчно и записать в таблицу базы данных (код валюты, наименование и значение).

Сейчас я могу только отобразить содержимое файла

$file = __DIR__ . '/XML_daily.asp';
    $file_handle = fopen($file, "r");
    while (!feof($file_handle)) {
        $line = fgets($file_handle);
        echo $line;
    }
    fclose($file_handle);

Сам файл выглядит так:

<?xml version="1.0" encoding="windows-1251"?>
<ValCurs Date="16.01.2021" name="Foreign Currency Market">
    <Valute ID="R01010"><NumCode>036</NumCode><CharCode>AUD</CharCode><Nominal>1</Nominal><Name>Австралийский доллар</Name><Value>56,8799</Value></Valute>
    <Valute ID="R01020A"><NumCode>944</NumCode><CharCode>AZN</CharCode><Nominal>1</Nominal><Name>Азербайджанский манат</Name><Value>43,2874</Value></Valute>
    <Valute ID="R01035"><NumCode>826</NumCode><CharCode>GBP</CharCode><Nominal>1</Nominal><Name>Фунт стерлингов Соединенного королевства</Name><Value>100,3599</Value></Valute>
//.................................
</ValCurs>

Как это сделать?


Ответы (1 шт):

Автор решения: DiD

А что сложного в чтении XML?

<?php
function xml2assoc(&$xml){
    $assoc = NULL;
    $n = 0;
    while($xml->read()){
        if($xml->nodeType == XMLReader::END_ELEMENT) break;
        if($xml->nodeType == XMLReader::ELEMENT and !$xml->isEmptyElement){
            $assoc[$n]['name'] = $xml->name;
            if($xml->hasAttributes) while($xml->moveToNextAttribute()) $assoc[$n]['atr'][$xml->name] = $xml->value;
            $assoc[$n]['val'] = xml2assoc($xml);
            $n++;
        }
        else if($xml->isEmptyElement){
            $assoc[$n]['name'] = $xml->name;
            if($xml->hasAttributes) while($xml->moveToNextAttribute()) $assoc[$n]['atr'][$xml->name] = $xml->value;
            $assoc[$n]['val'] = "";
            $n++;               
        }
        else if($xml->nodeType == XMLReader::TEXT) $assoc = $xml->value;
    }
    return $assoc;
}

$xml = new XMLReader();
$xml->XML(file_get_contents('https://www.cbr-xml-daily.ru/daily_utf8.xml'));
$currency_assoc = xml2assoc($xml);

print_r($currency_assoc);

$currency_vals = $currency_assoc[0]['val'];
$currency_flat = array_map(function($val){ return array_combine(array_column($val,'name'),array_column($val,'val')); }, array_column($currency_vals,'val'));

print_r($currency_flat);
→ Ссылка