Как получить данные нижеуказанного типа и извлечь их

Я пытаюсь вставить значения, которые постоянно предоставляются поставщиком данных, и сохранить их в таблице. Ниже указан формат:

GO XXX,YYY,ZZZ=Ss
%<QUOTE symbol="XXX" name="testname" exchange="OTHER" basecode="5" pointvalue="1.0" tickincrement="1" ddfexchange="k" lastupdate="20171212095542" mode="R"><SESSION day="B" timestamp="20171212104600" open="67" high="67" low="64" last="64" previous="59" volume="49000" numtrades="3" pricevolume="322.70" id="combined"/><SESSION day="A" timestamp="20171211000000" last="59" id="previous"/></QUOTE>
%<QUOTE symbol="YYY" name="testname2" exchange="OTHER" basecode="0" pointvalue="1.0" tickincrement="1" ddfexchange="k" lastupdate="20171212095542" mode="R"><SESSION day="B" timestamp="20171212102000" open="169" high="169" low="161" last="169" previous="169" volume="60309" numtrades="6" pricevolume="1009.82" id="combined"/><SESSION day="A" timestamp="20171211000000" last="169" id="previous"/></QUOTE>
%<QUOTE symbol="ZZZ" name="testname3" exchange="OTHER" basecode="9" pointvalue="1.0" tickincrement="1" ddfexchange="k" lastupdate="20171212095542" mode="R"><SESSION day="B" timestamp="20171212105500" open="8" high="8" low="6" last="6" previous="8" volume="9799179" numtrades="22" pricevolume="7013.11" id="combined"/><SESSION day="A" timestamp="20171211000000" last="8" id="previous"/></QUOTE>

Как передать эти данные в функцию контроллера и извлечь все значения, такие как «символ», «имя» и т. Д …?

Пожалуйста, помогите мне решить эту проблему …

0

Решение

Используя SimpleXML (после удаления% — при условии, что это часть данных), вы можете легко получить атрибуты …

$data = <<< XML
GO XXX,YYY,ZZZ=Ss
%<QUOTE symbol="XXX" name="testname" exchange="OTHER" basecode="5" pointvalue="1.0" tickincrement="1" ddfexchange="k" lastupdate="20171212095542" mode="R"><SESSION day="B" timestamp="20171212104600" open="67" high="67" low="64" last="64" previous="59" volume="49000" numtrades="3" pricevolume="322.70" id="combined"/><SESSION day="A" timestamp="20171211000000" last="59" id="previous"/></QUOTE>
%<QUOTE symbol="YYY" name="testname2" exchange="OTHER" basecode="0" pointvalue="1.0" tickincrement="1" ddfexchange="k" lastupdate="20171212095542" mode="R"><SESSION day="B" timestamp="20171212102000" open="169" high="169" low="161" last="169" previous="169" volume="60309" numtrades="6" pricevolume="1009.82" id="combined"/><SESSION day="A" timestamp="20171211000000" last="169" id="previous"/></QUOTE>
%<QUOTE symbol="ZZZ" name="testname3" exchange="OTHER" basecode="9" pointvalue="1.0" tickincrement="1" ddfexchange="k" lastupdate="20171212095542" mode="R"><SESSION day="B" timestamp="20171212105500" open="8" high="8" low="6" last="6" previous="8" volume="9799179" numtrades="22" pricevolume="7013.11" id="combined"/><SESSION day="A" timestamp="20171211000000" last="8" id="previous"/></QUOTE>

XML;

preg_match_all("/%<QUOTE(.*?)<\/QUOTE>/", $data, $list);
foreach ( $list[0] as $item )  {
$item = ltrim($item, "%");
$xml = simplexml_load_string($item);
echo (string)$xml['exchange'].PHP_EOL;
foreach ( $xml->SESSION as $session )   {
echo $session['day'].'-'.$session['timestamp'].PHP_EOL;
}
}

Вышеприведенный код выводит …

OTHER
B-20171212104600
A-20171211000000
OTHER
B-20171212102000
A-20171211000000
OTHER
B-20171212105500
A-20171211000000

Я обновил код с вашей новой структурой данных, я использую регулярные выражения — я не большой поклонник, но это должно извлечь только те компоненты, которые вам нужны. Он использует ту же структуру кода после извлечения каждого отдельного элемента, как и раньше.

Чтобы вставить данные в базу данных, вам нужно посмотреть что-то вроде PDO и как добавить данные в базу данных (что-нибудь вроде https://phpdelusions.net/pdo#dml поможет).

1

Другие решения

Привет, пожалуйста, взгляните на официальную документацию PHP для simpleXML: http://php.net/manual/en/ref.simplexml.php

Я создал небольшой фрагмент, который должен помочь вам начать: https://eval.in/918963

$string = '<QUOTE symbol="XXX" name="name_xxx" exchange="testdata" basecode="C" pointvalue="1.0" tickincrement="1" ddfexchange="U" lastupdate="20171212095542" mode="R">
<SESSION day="B" timestamp="20171212104600" open="67" high="67" low="64" last="64" previous="59" volume="49000" numtrades="3" pricevolume="0000" id="combined"/>
<SESSION day="A" timestamp="20171211000000" last="59" id="previous"/>
</QUOTE>';

$xml = simplexml_load_string($string);

//Get all QUOTE attributes
print_r($xml->attributes());

//Get the first SESSION
print_r($xml->SESSION[0]);

//Get all attributes of SESSION[0]
print_r($xml->SESSION[0]->attributes());

//Get a specific attribute of SESSION[0]
print_r($xml->SESSION[0]->attributes()->day);
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector