Парсинг XML-документа на PHP
В прошлой статье мы с Вами создавали XML-документ через PHP, и я обещал, что в следующей статье мы с Вами будем его парсить. И сегодня я Вам покажу, как можно парсить XML-документ на PHP.
Предлагаю парсить созданный нами в прошлой статье документ, а данные оттуда просто вывести в браузер. Привожу код скрипта:
<?php
$dom = new domDocument("1.0", "utf-8"); // Создаём XML-документ версии 1.0 с кодировкой utf-8
$dom->load("users.xml"); // Загружаем XML-документ из файла в объект DOM
$root = $dom->documentElement; // Получаем корневой элемент
$childs = $root->childNodes; // Получаем дочерние элементы у корневого элемента
/* Перебираем полученные элементы */
for ($i = 0; $i < $childs->length; $i++) {
$user = $childs->item($i); // Получаем следующий элемент из NodeList
$lp = $user->childNodes; // Получаем дочерние элементы у узла "user"
$id = $user->getAttribute("id"); // Получаем значение атрибута "id" у узла "user"
$login = $lp->item(0)->nodeValue; // Получаем значение узла "login"
$password = $lp->item(1)->nodeValue; // Получаем значение узла "password"
/* Выводим полученные данные */
echo "ID: $id<br />";
echo "Логин: $login<br />";
echo "Пароль: $password<br />";
echo "-----------------------<br />";
}
?>
Из этого кода Вы должны не только понять, как парсить XML-документ на PHP, но и то, что сам процесс парсинга зависит от структуры документа. То есть Вы должны знать, какова структура, иначе разобрать такой документ будет проблемно. Я уже когда-то писал, что главная особенность XML - это строгость синтаксиса. Надеюсь, Вы теперь понимаете, почему это так важно. Без этой "жёсткости кода" было бы крайне затруднительно парсить документы, а вещь эта очень часто требуется. Элементарно при импорте каких-то данных из XML-файла с последующим размещением их в базе данных.
-
- Михаил Русаков
Комментарии (8):
Михаил, когда я xml-документ проганяю в цикле for ($i = 0; $i < $childs->length; $i++), то в NodeList попадают еще и переносы строк (nodeName = '#text'). Приходится сначала проверять nodeName, а потом уже браться за него. Как такое преодолеть?
Ответить
Существует 3 способа. Один из них Вы описали, другой состоит в том, чтобы убрать все эти лишние строки вручную в самом файле. И третий способ заключается в том, чтобы в этот цикл попадали не просто дочерние элементы, а только те, которые нужны. Есть различные методы, которые позволяют вытащить те или иные элементы. Но Вы выбрали, на мой взгляд, лучший и универсальный способ, поэтому его и используйте.
Ответить
Михаил, У меня в Вам вопрос! У меня дома 4 компьютера! Один из них я хочу сделать сервером, а не загружать сайт на хостинг! Обьясните пожалуйста как это сделать, что нужно установить или создать и куда закинуть свой сайт! Спасибо.
Ответить
Я постараюсь написать об этом статью в ближайшее время.
Ответить
Прежде всего надо получить белый IP, чтобы любой компьютер в мире мог обратиться непосредственно к Вашему серверу. Доменное имя нужно будет купить и привязать к Вашему IP (не уверен на 100%, что это так. просто догадываюсь) На сервер надо поставить будет Apache. Скорее всего придется пользоваться ОС Ubuntu или Debian. Debian гораздо более стабильный на мой взгляд. Один мой знакомый держал дома веб-сервер на Debian'e. Аптайм - 5 лет или больше был.
Ответить
Здравствуйте Михаил! Обьясните пожалуйста как вставить шаблон сделанный в фотошоп на страницу? Ведь этот шаблон будет картинкой! Тогда как сделать чтобы при нажатии на кнопку например пользователь переходил на другую страницу?
Ответить
Это называется вёрстка: http://myrusakov.ru/html-makeup.html Также могу порекомендовать свой курс по вёрстке: http://srs.myrusakov.ru/makeup
Ответить
Михаил, подскажите. Приведенный выше код работает отлично. Но стоит мне навести порядок в xml файле - расставить переносы строк и сделать табуляцию, php парсер перестает работать. И выдает ошибку: Fatal error: Call to undefined method DOMText::getAttribute() in Z:\home\school\www\xmlparse\index.php on line 10 И за чего возникает эта ошибка?
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.