Как отобразить XML-файл в php
XML — это формат строки. SimpleXML преобразует XML в объекты PHP для облегчения манипулирования в PHP. Если вы хотите отобразить XML, просто отобразите строку XML и, как уже упоминалось, не забудьте добавить правильные заголовки ответа HTTP. Это то, что указывает клиенту HTTP обрабатывать файл как файл XML.
8 ответов
Вы можете использовать URL-адреса HTTP, как если бы они были локальными файлами, благодаря обертки PHP
Вы можете получить содержимое с URL-адреса через file_get_contents(), а затем повторить его или даже прочитать непосредственно с помощью файла readfile()
$file = file_get_contents('http://example.com/rss'); echo $file;
readfile('http://example.com/rss');
Не забудьте установить правильный тип MIME, прежде чем выводить что-либо.
header('Content-type: text/xml');
Чтобы отобразить содержимое XML внутри файла HTML, я должен использовать echo htmlentities($file) для отображения необработанного XML (теги и содержимое). Есть ли способ лучше?
Вот что сработало для меня:
Использование htmlspecialchars предотвратит отображение тегов как html и ничего не сломает. Обратите внимание, что я использую Prettyprint, чтобы выделить код;)
Вы можете использовать метод asXML
Вы также можете указать имя файла
Если вы просто хотите распечатать необработанный XML, вам не нужен Simple XML. Я добавил некоторые обработки ошибок и простой пример того, как вы можете использовать SimpleXML.
curl_close ($curl); //we can at this point echo the XML if you want //echo $result; //parse xml string into SimpleXML objects $xml = simplexml_load_string($result); if ($xml === false) < die('Error parsing XML'); >//now we can loop through the xml structure foreach ($xml->channel->item as $item) < print $item->title; >
$location = "http://rss.news.yahoo.com/rss/topstories"; print file_get_contents($location);
Некоторые места (например, digg.com) не позволят вам получить доступ к их сайту без использования пользовательского агента, и в этом случае вам нужно будет установить это с помощью ini_set() перед запуском file_get_contents().
echo(header('content-type: text/xml'));
Чтобы отобразить html/xml «как есть» (т.е. все сущности и элементы), просто избегайте символов , & и приложите результат с помощью :
$XML = ' ó ó '; $XML = str_replace('&', '&', $XML); $XML = str_replace('' . $XML . '
';
Протестировано на Chrome 45
Работа с XML средствами PHP
Давайте начнем с самого простого: загрузки и выгрузки XML-документа с использованием DOM. Основной класс, который мы будем использовать, это DOMDocument. Через него можно создавать новые документы, сохранять их, а также загружать существующие.
// Создаём XML-документ версии 1.0 с кодировкой utf-8 $dom = new DOMDocument('1.0', 'utf-8'); // Текст XML-документа $strXML = '- Первый
- Второй
'; // Загружаем XML-документ из строки $dom->loadXML($strXML); /* // Загружаем XML-документ из файла $dom->load('doc.xml'); // Убираем лишние пробелы и отступы $dom->preserveWhiteSpace = false; */ // Сохраняем XML-документ как строку и выводим в браузер $xml = $dom->saveXML(); echo htmlspecialchars($xml); // Сохраняем XML-документ в файл $dom->save('doc.xml'); ?>
Как получить список дочерних узлов
// Создаём XML-документ $dom = new DOMDocument('1.0', 'utf-8'); // Текст XML-документа $strXML = '- Первый
- Второй
'; // Загружаем XML-документ из строки $dom->loadXML($strXML); // Получаем корневой элемент $root = $dom->documentElement; // Получаем список дочерних узлов $childs = $root->childNodes; for ($i = 0; $i $childs->length; $i++) $child = $childs->item($i); // Выводим информацию об узле echo $child->nodeName . ' : ' . $child->nodeValue . '
'; > ?>
Свойство nodeName содержит название элемента (в данном случае, item ), а nodeValue содержимое элемента (в данном случае, « Первый » и « Второй »).
Работа с атрибутами узлов
Давайте посмотрим, как получить значение атрибута узла, устанавить новое значение, создать и удалить атрибут:
// Создаём XML-документ $dom = new DOMDocument('1.0', 'utf-8'); // Текст XML-документа $strXML = '- Первый
- Второй
- Третий
'; // Загружаем XML-документ из строки $dom->loadXML($strXML); // Получаем корневой элемент $root = $dom->documentElement; // Первый дочерний элемент $first = $root->firstChild; // Следующий сестринский элемент $second = $first->nextSibling; // Последний дочерний элемент $third = $root->lastChild; // Выводим информацию о первом дочернем элементе echo 'Элемент ' . $first->nodeName . ', значение «' . $first->nodeValue . '», атрибут id'); // Устанавливаем атрибут id для второго дочернего элемента $second->setAttribute('id', 2); // Устанавливаем атрибут id для третьего дочернего элемента $attr = $dom->createAttribute('id'); $attr->value = 3; $third->appendChild($attr); // Удаляем атрибут id для третего дочернего элемента if ( $third->hasAttribute('id') ) $third->removeAttribute('id'); ?>
Создание XML-документа
// Создаём XML-документ $dom = new DOMDocument('1.0', 'utf-8'); // Создаём корневой элемент $root = $dom->createElement('users'); $dom->appendChild($root); $users = array( array('id' => 1, 'name' => 'Николай Петров', 'email' => 'petrov.n@mail.ru'), array('id' => 2, 'name' => 'Петр Иванов', 'email' => 'ivanov.p@mail.ru'), array('id' => 3, 'name' => 'Сергей Смирнов', 'email' => 'smirnov.s@mail.ru') ); foreach ( $users as $value ) // Создаём узел $user = $dom->createElement('user'); // Добавляем дочерний элемент для $root->appendChild($user); // Устанавливаем атрибут id для узла $user->setAttribute('id', $value['id']); // Создаём узел с текстом внутри $name = $dom->createElement('name', $value['name']); // Добавляем дочерний элемент для $user->appendChild($name); // Создаём узел $email = $dom->createElement('email'); // Создаем текстовой узел $text = $dom->createTextNode($value['email']); // Создаем текстовой узел внутри конструкции // $text = $dom->createCDATASection($value['email']); // Добавляем текстовой узел для $email->appendChild($text); // Добавляем дочерний элемент для $user->appendChild($email); > // Сохраняем полученный XML-документ в файл $dom->save('users.xml'); ?>
Содержимое файла users.xml:
Николай Петров petrov.n@mail.ru Петр Иванов ivanov.p@mail.ru Сергей Смирнов smirnov.s@mail.ru
Извлечение данных из xml-документа
Давайте теперь извлечем данные из документа users.xml обратно в массив:
// Создаём XML-документ $dom = new DOMDocument('1.0', 'utf-8'); // Загружаем XML-документ из файла $dom->load('users.xml'); // Получаем корневой элемент $root = $dom->documentElement; // Получаем дочерние элементы корневого элемента $users = $root->childNodes; // Перебираем полученные элементы foreach ($users as $user) // Получаем значение атрибута id узла $id = $user->getAttribute('id'); // Получаем дочерние элементы узла $info = $user->childNodes; // Получаем значение узла $name = $info->item(0)->nodeValue; // Получаем значение узла $email = $info->item(1)->nodeValue; // Записываем данные в массив $array[] = array('id' => $id, 'name' => $name, 'email' => $email); > print_r($array); ?>
Array ( [0] => Array ( [id] => 1 [name] => Николай Петров [email] => petrov.n@mail.ru ) [1] => Array ( [id] => 2 [name] => Петр Иванов [email] => ivanov.p@mail.ru ) [2] => Array ( [id] => 3 [name] => Сергей Смирнов [email] => smirnov.s@mail.ru ) )
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
- 1С:Предприятие (31)
- API (29)
- Bash (43)
- CLI (99)
- CMS (139)
- CSS (50)
- Frontend (75)
- HTML (66)
- JavaScript (150)
- Laravel (72)
- Linux (146)
- MySQL (76)
- PHP (125)
- React.js (66)
- SSH (27)
- Ubuntu (68)
- Web-разработка (509)
- WordPress (73)
- Yii2 (69)
- БазаДанных (95)
- Битрикс (66)
- Блог (29)
- Верстка (43)
- ИнтернетМагаз… (84)
- КаталогТоваров (87)
- Класс (30)
- Клиент (27)
- Ключ (28)
- Команда (68)
- Компонент (60)
- Конфигурация (62)
- Корзина (32)
- ЛокальнаяСеть (28)
- Модуль (34)
- Навигация (31)
- Настройка (140)
- ПанельУправле… (29)
- Плагин (33)
- Пользователь (26)
- Практика (99)
- Сервер (74)
- Событие (27)
- Теория (105)
- Установка (66)
- Файл (47)
- Форма (58)
- Фреймворк (192)
- Функция (36)
- ШаблонСайта (68)
Загрузка и выгрузка XML-документов через DOM
В предыдущей статье мы рассмотрели стандарт DOM. И в этой статье мы с Вами будем его применять с использованием языка PHP. И начнём с самого простого: загрузки и выгрузки XML-документа с использованием DOM.
Основной класс, который мы будем использовать, это domDocument. Через него можно создавать новые документы, сохранять их, а также загружать существующие. Давайте с Вами разберём его на примере:
$dom = new domDocument(«1.0», «utf-8»); // Создаём XML-документ версии 1.0 с кодировкой utf-8
/* Текст XML-документа */
$xml ;
$dom->loadXML($xml); // Загружаем в объект domDocument XML-разметку
echo htmlspecialchars($dom->saveXML()); // Выгрузка в окно браузера XML-документа
echo «
«; // Переход на новую строку
$dom->save(«doc.xml»); // Сохраняем XML-документ в файл
$dom->load(«doc.xml»); // Выгружаем из файла XML-документ
echo htmlspecialchars($dom->saveXML()); // Выгрузка в окно браузере XML-документа (уже из файла)
?>
Главное, что Вы должны усвоить из данного кода — это то, как можно сохранять XML-документы в файл и загружать из этих файлов обратно в объект domDocument. Это самое основное, что постоянно используется практически везде, где вообще имеются XML-файлы.
Создано 23.04.2012 13:18:55
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Комментарии ( 4 ):
Ошибка в примере. ПХП код не в своей скорлупе,
Михаил, а чем различаются версии xml документов?
От этого зависит то, как он будет интерпретироваться.
XML-документ создаётся, а в браузере выдаёт вот такое: Warning: DOMDocument::loadXML() [domdocument.loadxml]: Input is not proper UTF-8, indicate encoding ! Bytes: 0xDD 0xEB 0xE5 0xEC in Entity, line: 3 in Z:\home\domain\www\load_xml.php on line 8 Warning: DOMDocument::load() [domdocument.load]: Start tag expected, ‘
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.