|
0 / 0 / 0
Регистрация: 02.05.2021
Сообщений: 21
|
||||||||||||||||||||||||||||||||
Чтение XML файла, используя XMLReader02.05.2021, 21:59. Показов 4034. Ответов 11
Мне поставлена задача: загрузить товары поставщика в определенный интернет-магазин.
По ftp-серверу скачиваю два файла: pricat и prodat. pricat - xml файл, в нём находится некоторая (не вся) информация о товарах поставщика. prodat - xml файл, заархивированный в zip, в нём находится вся информация о товарах поставщика. Что делаю я: Скачиваю на хостинг эти файлы. Извлекаю из архива xml файл, удаляю архив. Так как эти файлы в кодировке "windows-1251", меняю кодировку на "utf-8". После этого пытаюсь спарсить данные и залить их в БД. В чём проблема: Одни и те же действия, что с файлом pricat, что с файлом prodat. Только парсер с pricat - работает, а с prodat - нет. Ниже привожу код парсеров для файлов pricat и prodat, а так же то, что они выводят. PARSER PRICAT
Прикладываю к теме два образца (как выглядит pricat и prodat документы - сильно обрезанные): PRICAT
На счёт кодировки PRODAT в приведённом примере - я ошибся файлом, на самом деле там все названия отображены адекватно. Добавлено через 3 минуты Мало того, что PARSER PRODAT не видит элементов XML, так ещё он выводит ещё очень мало "НЕ ЭЕЛЕМЕНТОВ". На самом деле их должно быть кратно больше, чем он выводит, т.к. там > 4.000.000 строк. Это меня даже больше волнует, чем то, что оно не работает ![]() Добавлено через 2 минуты
0
|
||||||||||||||||||||||||||||||||
| 02.05.2021, 21:59 | |
|
Ответы с готовыми решениями:
11
Чтение xml файла Рекурсивное чтение xml файла используя XmlReader |
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
||||||||||||||||
| 03.05.2021, 13:13 | ||||||||||||||||
|
Во-первых, лучше до вызова simplexml_load_string проверять имя элемента (чтобы память не забивать):
По остальному -- всё работает, проверил с вашим XML-кодом (только обернул все в корневой элемент). Уберите echo "NE ELEMENT \n";, пропишите условие и тестируйте:
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 02.05.2021
Сообщений: 21
|
|||||||
| 03.05.2021, 20:51 [ТС] | |||||||
|
Para bellum, сама проблема в том, что эта часть кода:
Вот, что у меня сейчас:
Я что-то сделал не так?
0
|
|||||||
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
|||||||
| 04.05.2021, 11:55 | |||||||
|
В документе много "не элементов" и не нужно на этом заострять внимание. Теперь пошагово: 1) Беру XML-код "PRODAT" из вашего первого сообщения, оборачиваю его в тег <root></root> (обратите на это внимание) и сохраняю в файл test.xml 2) Рядом с файлом test.xml создаю PHP-файл со следующим кодом:
Светло-серый Прямоугольная (для плоского кабеля) Необработанная 10 Да Пластик 5 5 1.7 2x5 мм Нет Да Светло-серый Прямоугольная (для плоского кабеля) Необработанная 8 Да Пластик 4 4 1.7 2x5 мм Нет Да
0
|
|||||||
|
0 / 0 / 0
Регистрация: 02.05.2021
Сообщений: 21
|
|||||||||||
| 04.05.2021, 23:52 [ТС] | |||||||||||
|
Para bellum, сейчас нашел некую закономерность.
У меня полный документ начинается с:
Но стоит убрать эту строчку, так выводится:
Просто с файлом pricat такой проблемы не было,а в prodat почему-то появилась.
0
|
|||||||||||
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
||||||||||||||||
| 05.05.2021, 07:02 | ||||||||||||||||
|
Протестируйте код в том виде, в каком я тестирую.
test.xml:
Я не могу воспроизвести ошибку. У меня, как видите, выводится. PHP 8 использую
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 02.05.2021
Сообщений: 21
|
|
| 05.05.2021, 13:16 [ТС] | |
|
Para bellum, да, у меня выводится то же, что и у вас.
Но как поступить с целым файлом? С целым файлом этот код не работает, а с частью - без проблем.
0
|
|
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
|
| 05.05.2021, 13:53 | |
|
Не знаю даже. Я могу протестировать скрипт только с теми данными, которые вы предоставили.
Гадать смысла нет.
0
|
|
|
0 / 0 / 0
Регистрация: 02.05.2021
Сообщений: 21
|
|
| 05.05.2021, 17:08 [ТС] | |
|
Para bellum, если у вас будет свободное время, пожалуйста, протестируйте свой код на этом xml документе (он находится в архиве).
Это действительно важно, спасибо.
0
|
|
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
|||||||||||||||||
| 05.05.2021, 17:48 | |||||||||||||||||
Сообщение было отмечено f5d5 как решение
Решение
Да, возникает ошибка.
Но тут причина на поверхности. Я уже говорил:
После принудительной перекодировки файла в windows-1251 (или же при изменении в файле windows-1251 на utf-8) скрипт отрабатывает штатно.
1
|
|||||||||||||||||
|
0 / 0 / 0
Регистрация: 02.05.2021
Сообщений: 21
|
|
| 05.05.2021, 19:48 [ТС] | |
|
Para bellum, странно, с pricat такой проблемы не было, хотя я делал точно так же.
Есть ли способ спарсить данные из документа на windows-1251, чтобы в конечном итоге они были перекодированы в utf-8? Первое что приходит на ум: спарсить в windows-1251, после чего сохранить результат парсинга в другой документ и уже спарсить новый документ чисто построчно. Может быть посоветуете вариант лучше?) Просто БД в utf-8.
0
|
|
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
|||
| 06.05.2021, 07:49 | |||
|
А зачем вы решили эту перекодировку делать (при этом оставляя заголовок encoding="windows-1251" нетронутым.)? В документации написано:
0
|
|||
| 06.05.2021, 07:49 | |
|
Помогаю со студенческими работами здесь
12
Отобразить весь xml файл используя XMLreader Прочитать данные из XML файла с помощью xmlreader Чтение XML файла, без использования встроенных средств работы с XML XmlReader: считать значение из xml и вывести на экран Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|