Два примера чтения xml файлов, которые обновляют цены и остатки в базе данных интернет магазина.
Пример файла:
<?xml version="1.0" encoding="utf-8"?>
<stocks date="2018-01-30">
<item>
<article>105AG</article>
<name>105AG "Ангел" Ночник</name>
<stock>0</stock>
<price>483.00</price>
</item>
<item>
<article>105BB</article>
<name>105BB "Медведь" Ночник</name>
<stock>40</stock>
<price>39.00</price>
</item>
...
</stocks>
Чтение файла и обновление записей в БД:
Для доступа к БД используется библиотека PDO MySQL.
// Подключение к БД.
$dbh = new PDO('mysql:dbname=НАЗВАНИЕ_БД;host=localhost', 'ЛОГИН', 'ПАРОЛЬ');
$data = simplexml_load_file('http://site.com/file.xml');
foreach ($data->item as $row) {
$articool = strval($row->article);
$stock = intval($row->stock);
$price = floatval($row->price);
// Поиск товара в БД по артикулу.
$sth = $dbh->prepare("SELECT * FROM `prods` WHERE `articool` = ?");
$sth->execute(array($articool));
$prod = $sth->fetch(PDO::FETCH_ASSOC);
// Обновление товара.
if (!empty($prod)) {
$sth = $dbh->prepare("UPDATE `prods` SET `price` = ?, `stock` = ? WHERE `id` = ?");
$sth->execute(array($price, $stock, $prod['id']));
}
}
1C формирует файлы с использованием кириллицы и значения хранятся в атрибутах элементов:
<Таблица ДатаАкуальности="30.01.2018 9:07:21">
<element>
<Артикул Артикул="002040"/>
<Наименование Наименование="Светильник SOLO CYL MR16 ХРОМ/ПРОЗРАЧНЫЙ"/>
<Цены Розничная="1436" Оптовая="870"/>
<Остаток Остаток="10"/>
</element>
<element>
<Артикул Артикул="002041"/>
<Наименование Наименование="Светильник ROSA CYL MR16 ХРОМ/ПРОЗРАЧНЫЙ"/>
<Цены Розничная="876" Оптовая="438"/>
<Остаток Остаток="15"/>
</element>
...
</Таблица>
// Подключение к БД.
$dbh = new PDO('mysql:dbname=НАЗВАНИЕ_БД;host=localhost', 'ЛОГИН', 'ПАРОЛЬ');
$data = simplexml_load_file('http://site.com/file_1c.xml');
foreach ($data->item as $row) {
$articool = strval($row->Артикул['Артикул']);
$stock = intval($row->Остаток['Остаток']);
$price = floatval($row->Цены['Розничная']);
// Поиск товара в БД по артикулу.
$sth = $dbh->prepare("SELECT * FROM `prods` WHERE `articool` = ?");
$sth->execute(array($articool));
$prod = $sth->fetch(PDO::FETCH_ASSOC);
// Обновление товара.
if (!empty($prod)) {
$sth = $dbh->prepare("UPDATE `prods` SET `price` = ?, `stock` = ? WHERE `id` = ?");
$sth->execute(array($price, $stock, $prod['id']));
}
}