Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 40

Парсинг xml в таблицу

25.10.2018, 15:48. Показов 1973. Ответов 9
Метки xml (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день уважаемые знатоки.
Хочу парсить товар из xml к себе на сайт.
Но возникли проблемы.
Написать парсинг сразу с сайта по ссылке не удалось

вот сайт http://zakaz.grizzly.su/yandex_export.xml

Обошел проблему парсингом с файла (сохранил и удалил все лишнее оставив только все что в <offers> )
вот мой файл после правок https://vinnypooh.ru/export-xml/grizzly-pro.xml

Парсил я так.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
//$url = "http://zakaz.grizzly.su/yandex_export.xml"; // Адрес до RSS-ленты
$url = "export-xml/grizzly-pro.xml"; // Название xml файла 
$xml = simplexml_load_file($url);
echo '<table cellpadding="5" cellspacing="0" border="1">';
echo "<tr><td>"
    .'id'."</td><td>"
    .'Статус товара'."</td><td>"
    .'Имя'."</td><td>"
    .'Категория'."</td><td>"
    .'Количество'."</td><td>" 
    .'Цена ОПТ'."</td><td>"
    .'Цена РОЗН'."</td><td>"
    .'Описание'."</td><td>"
    .'Полное описание'."</td><td>"
    .'Габариты'."</td><td>"
    .'Артикул'."</td><td>"
    .'Цвет'."</td><td>"
    .'Материал'."</td><td>"
    .'Год коллекции'."</td><td>"
    .'Бренд'."</td><td>"
    .'Пол'."</td><td>"
    .'Фото 1'."</td><td>"
    .'Фото 2'."</td><td>"
    .'Фото 3'."</td><td>"
    .'Фото 4'."</td><td>"
    .'Фото 5'."</td></tr>";
foreach($xml as $offer  ){
echo "<tr><td>"
    .$offer['id']."</td><td>"
    .$offer['available']."</td><td>"
    .$offer->name."</td><td>"
    .$offer->categoryId."</td><td>"
    .$offer->quantity."</td><td>"
    .$offer->price."</td><td>"
    .$offer->price_retail."</td><td>"
    .$offer->description."</td><td>"
    .$offer->description_detail."</td><td>"
    .$offer->param[0]."</td><td>"
    .$offer->param[1]."</td><td>"
    .$offer->param[2]."</td><td>"
    .$offer->param[3]."</td><td>"
    .$offer->param[4]."</td><td>"
    .$offer->param[5]."</td><td>"
    .$offer->param[6]."</td><td>"
    .$offer->picture[0]."</td><td>"
    .$offer->picture[1]."</td><td>"
    .$offer->picture[2]."</td><td>"
    .$offer->picture[3]."</td><td>" 
    .$offer->picture[4]."</td></tr>";
}
echo "</table>";
?>
Но возникла проблема с выгрузкой param[0]-param[6]
Оказалось что не все они заполненные и в результате данный в столбиках смещаются.
Как можно поправить выгрузку чтобы не было смещений и как поправить чтобы парсило сразу с сайта?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2018, 15:48
Ответы с готовыми решениями:

XML парсинг
подскажите как можно пропарсить файл вот такой приблизительной структуры: &lt;somehead&gt; ...

Парсинг XML
подгрузить фаил из сети получается. Пытаюсь пропарсить но на экран ничего не выводится в чем ощибка? &lt;?php $dom = new...

парсинг xml
Прошу помощи, господа! есть xml файл с содержимым: &lt;tv generator-info-name=&quot;TVH_W/2.0&quot;...

9
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 40
26.10.2018, 14:07  [ТС]
Переделал так что берет данные на прямую с сайта по ссылке.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
$rss =  simplexml_load_file('http://zakaz.grizzly.su/yandex_export.xml'); // Адрес до RSS-ленты
echo '<table cellpadding="5" cellspacing="0" border="1">';
echo "<tr><td>"
    .'id'."</td><td>"
    .'Статус товара'."</td><td>"
    .'Имя'."</td><td>"
    .'Категория'."</td><td>"
    .'Количество'."</td><td>" 
    .'Цена ОПТ'."</td><td>"
    .'Цена РОЗН'."</td><td>"
    .'Описание'."</td><td>"
    .'Полное описание'."</td><td>"
    .'Габариты'."</td><td>"
    .'Артикул'."</td><td>"
    .'Цвет'."</td><td>"
    .'Материал'."</td><td>"
    .'Год коллекции'."</td><td>"
    .'Бренд'."</td><td>"
    .'Пол'."</td><td>"
    .'Фото 1'."</td><td>"
    .'Фото 2'."</td><td>"
    .'Фото 3'."</td><td>"
    .'Фото 4'."</td><td>"
    .'Фото 5'."</td></tr>";
foreach ($rss->shop->offers->offer as $offer) {     
echo "<tr><td>"
    .$offer['id']."</td><td>"
    .$offer['available']."</td><td>"
    .$offer->name."</td><td>"
    .$offer->categoryId."</td><td>"
    .$offer->quantity."</td><td>"
    .$offer->price."</td><td>"
    .$offer->price_retail."</td><td>"
    .$offer->description."</td><td>"
    .$offer->description_detail."</td><td>"
    .$offer->param[0]."</td><td>"
    .$offer->param[1]."</td><td>"
    .$offer->param[2]."</td><td>"
    .$offer->param[3]."</td><td>"
    .$offer->param[4]."</td><td>"
    .$offer->param[5]."</td><td>"
    .$offer->param[6]."</td><td>"
    .$offer->picture[0]."</td><td>"
    .$offer->picture[1]."</td><td>"
    .$offer->picture[2]."</td><td>"
    .$offer->picture[3]."</td><td>" 
    .$offer->picture[4]."</td></tr>";
}
echo "</table>";
?>
Но проблему с param[0] до param[6] не могу решить.
Помогите кто шарит.
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
26.10.2018, 15:57
PHP
1
.( isset($offer->param[0]) ? $offer->param[0] : '&nbsp;' )."</td><td>"
Или я не правильно понял суть вопроса? Чтобы ячейки таблицы не смещались, задайте им фиксированную ширину.
0
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 40
26.10.2018, 16:46  [ТС]
Спасибо что отозвались но не много не то.
Есть 6 видов параметров но в каждом товаре не всегда заполнено 6, иногда даже бывает заполнено 3

в id 18457 нет параметра цвет и параметр Материал сместился в столбик цвета а за ним все остальное
в id 26134 нет параметра так же
Миниатюры
Парсинг xml в таблицу  
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
26.10.2018, 19:35
Kifir4ik, покажите исходный код страницы с выводом таблицы (из браузера).

Добавлено через 1 час 14 минут
Хотя ладно, запустил код у себя. На быструю руку:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
$rss =  simplexml_load_file('http://zakaz.grizzly.su/yandex_export.xml'); // Адрес до RSS-ленты
echo '<table cellpadding="5" cellspacing="0" border="1">';
echo "<tr><td>"
    .'id'."</td><td>"
    .'Статус товара'."</td><td>"
    .'Имя'."</td><td>"
    .'Категория'."</td><td>"
    .'Количество'."</td><td>" 
    .'Цена ОПТ'."</td><td>"
    .'Цена РОЗН'."</td><td>"
    .'Описание'."</td><td>"
    .'Полное описание'."</td><td>"
    .'Габариты'."</td><td>"
    .'Артикул'."</td><td>"
    .'Цвет'."</td><td>"
    .'Материал'."</td><td>"
    .'Год коллекции'."</td><td>"
    .'Бренд'."</td><td>"
    .'Пол'."</td><td>"
    .'Фото 1'."</td><td>"
    .'Фото 2'."</td><td>"
    .'Фото 3'."</td><td>"
    .'Фото 4'."</td><td>"
    .'Фото 5'."</td></tr>";
foreach ($rss->shop->offers->offer as $offer) {  
    if($offer->param[2]['name']=='Цвет'){
        echo "<tr><td>"
        .$offer['id']."</td><td>"
        .$offer['available']."</td><td>"
        .$offer->name."</td><td>"
        .$offer->categoryId."</td><td>"
        .$offer->quantity."</td><td>"
        .$offer->price."</td><td>"
        .$offer->price_retail."</td><td>"
        .$offer->description."</td><td>"
        .$offer->description_detail."</td><td>"
        .$offer->param[0]."</td><td>"
        .$offer->param[1]."</td><td>"
        .$offer->param[2]."</td><td>"
        .$offer->param[3]."</td><td>"
        .$offer->param[4]."</td><td>"
        .$offer->param[5]."</td><td>"
        .$offer->param[6]."</td><td>"
        .$offer->picture[0]."</td><td>"
        .$offer->picture[1]."</td><td>"
        .$offer->picture[2]."</td><td>"
        .$offer->picture[3]."</td><td>" 
        .$offer->picture[4]."</td></tr>";
    }else{
        echo "<tr><td>"
        .$offer['id']."</td><td>"
        .$offer['available']."</td><td>"
        .$offer->name."</td><td>"
        .$offer->categoryId."</td><td>"
        .$offer->quantity."</td><td>"
        .$offer->price."</td><td>"
        .$offer->price_retail."</td><td>"
        .$offer->description."</td><td>"
        .$offer->description_detail."</td><td>"
        .$offer->param[0]."</td><td>"
        .$offer->param[1]."</td><td>"
        ."&nbsp;</td><td>"
        .$offer->param[2]."</td><td>"
        .$offer->param[3]."</td><td>"
        .$offer->param[4]."</td><td>"
        .$offer->param[5]."</td><td>"
        .$offer->picture[0]."</td><td>"
        .$offer->picture[1]."</td><td>"
        .$offer->picture[2]."</td><td>"
        .$offer->picture[3]."</td><td>" 
        .$offer->picture[4]."</td></tr>";
    }
}
echo "</table>";
?>
Ну можно и по красивее оформить (не стал заморачиваться). Ну принцип я думаю понятен? По номеру элемента нет смысла проверять значение, нужно смотреть что из себя представляет тот или иной элемент массива.
1
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 40
27.10.2018, 01:02  [ТС]
Спасибо параметр Цвет поправился, но иногда нет данных в Габариты иногда нет Год коллекции.
Я думал есть возможность как-то привязаться к param name="
Или твоим методом прописать на каждый param?
<param name="Габариты" unit="(Д.хВ.хГ.)">тут данные</param>
<param name="Артикул">тут данные</param>
<param name="Цвет">тут данные</param>

Покрасивее пока не могу, только учусь.

Добавлено через 4 часа 24 минуты
Вывожу тут
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
27.10.2018, 10:51
Цитата Сообщение от Kifir4ik Посмотреть сообщение
Или твоим методом прописать на каждый param?
нет конечно.

Цитата Сообщение от Kifir4ik Посмотреть сообщение
Я думал есть возможность как-то привязаться к param name="
естественно. Создайте 6 переменных (для каждой динамической ячейки (по умолчанию: $color = '&nbsp;')), и проверяйте param[n]['name'], если это "Цвет", то $color = param[n], и так далее. А в таблице выводите переменные а не элементы массива из simplexml_load_file
0
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 40
27.10.2018, 12:00  [ТС]
Что то не выходит.
Сможешь сделать пример для парочки параметров?
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
27.10.2018, 13:15
Лучший ответ Сообщение было отмечено Kifir4ik как решение

Решение

Цитата Сообщение от Kifir4ik Посмотреть сообщение
Что то не выходит.
или просто не понял?

Вот примерчик:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
$rss =  simplexml_load_file('http://zakaz.grizzly.su/yandex_export.xml'); // Адрес до RSS-ленты
echo '<table cellpadding="5" cellspacing="0" border="1">';
echo "<tr><td>"
    .'id'."</td><td>"
    .'Статус товара'."</td><td>"
    .'Имя'."</td><td>"
    .'Категория'."</td><td>"
    .'Количество'."</td><td>" 
    .'Цена ОПТ'."</td><td>"
    .'Цена РОЗН'."</td><td>"
    .'Описание'."</td><td>"
    .'Полное описание'."</td><td>"
    .'Габариты'."</td><td>"
    .'Артикул'."</td><td>"
    .'Цвет'."</td><td>"
    .'Материал'."</td><td>"
    .'Год коллекции'."</td><td>"
    .'Бренд'."</td><td>"
    .'Пол'."</td><td>"
    .'Фото 1'."</td><td>"
    .'Фото 2'."</td><td>"
    .'Фото 3'."</td><td>"
    .'Фото 4'."</td><td>"
    .'Фото 5'."</td></tr>";
foreach ($rss->shop->offers->offer as $offer) {  
        
        $arr_name=[];
        
        for($i=0; $i<7; $i++){
            if(isset($offer->param[$i]['name'])){
                $arr_name[(string)$offer->param[$i]['name']] = $offer->param[$i];
            }
        }
        
        $gabariti = isset($arr_name["Габариты"]) ? $arr_name["Габариты"] : '&nbsp;';
        $artikul = isset($arr_name["Артикул"]) ? $arr_name["Артикул"] : '&nbsp;';
        $tsvet = isset($arr_name["Цвет"]) ? $arr_name["Цвет"] : '&nbsp;';
        $material = isset($arr_name["Материал"]) ? $arr_name["Материал"] : '&nbsp;';
        $god_kollektsii = isset($arr_name["Год коллекции"]) ? $arr_name["Год коллекции"] : '&nbsp;';
        $brend = isset($arr_name["Бренд"]) ? $arr_name["Бренд"] : '&nbsp;';
        $pol = isset($arr_name["Пол"]) ? $arr_name["Пол"] : '&nbsp;';
        
        
        echo "<tr><td>"
        .$offer['id']."</td><td>"
        .$offer['available']."</td><td>"
        .$offer->name."</td><td>"
        .$offer->categoryId."</td><td>"
        .$offer->quantity."</td><td>"
        .$offer->price."</td><td>"
        .$offer->price_retail."</td><td>"
        .$offer->description."</td><td>"
        .$offer->description_detail."</td><td>"
        .$gabariti."</td><td>"
        .$artikul."</td><td>"
        .$tsvet."</td><td>"
        .$material."</td><td>"
        .$god_kollektsii."</td><td>"
        .$brend."</td><td>"
        .$pol."</td><td>"
        .$offer->picture[0]."</td><td>"
        .$offer->picture[1]."</td><td>"
        .$offer->picture[2]."</td><td>"
        .$offer->picture[3]."</td><td>" 
        .$offer->picture[4]."</td></tr>";
}
echo "</table>";
?>
Возможна и другая реализация. Советую попытаться понять алгоритм и логику работы скрипта. Потом тебе же легче будет работать с выводом аналогичных структур.
1
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 40
27.10.2018, 13:18  [ТС]
Походу не понял, делал совсем по другому.
Спс что написал, пробую разобраться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2018, 13:18
Помогаю со студенческими работами здесь

Парсинг XML
Всем привет форумчане. Встретился с казуальной задачей распарсить XML и распихать по переменным, но что-то пошло не так. Пробовал таким...

Парсинг xml
Здравствуйте! Помогите с написанием парсера для xml-файлов такой структуры: &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;...

Парсинг XML
Где-то я запутался, не могу доделать программу. Это обычный тест и его нужно считать с xml документа, а затем отправить данные на другую...

Парсинг XML
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;Translation code=&quot;200&quot; lang=&quot;en-ru&quot;&gt;&lt;text&gt;привет&lt;/text&gt;&lt;/Translation&gt; Как парсить...

Парсинг XML
Здравствуйте! Прошу помощь в решении данного вопроса, буду очень благодарен, так как я в тупике... Проблема следующая, пытался...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru