Генерировать xml файл php

PHP Generate XML file — SimpleXML, DOM, Reader/Writer Method

Following table explain which are the good method to follow the standard and which are not.

Operation DOM XML Reader/Writer SimpleXML
Read Poorly support
Write Poorly support
Manipulate Poorly support Poorly support
Full Control
Namespace Support Poorly support
XPATH Support
Validate

Generate XML file in PHP SimpleXML, DOM, Reader/Writer Method

DOM (Document Object Model) XML Method

  • Very fast for small document, load entire document into memory.
  • Simple PHP DOM interface.
  • Access anything in tree, traversed in multitude of way.
  • XML parsing library, libXML2 use for a DOM.
  • Load entire document into memory.
  • Data access only after completely document parsed.
  • Support PHP 5+ or later version.

Create XML using DOM

formatOutput = true; $root = $dom->createElement('student'); $dom->appendChild($root); $result = $dom->createElement('result'); $root->appendChild($result); $result->setAttribute('id', 1); $result->appendChild( $dom->createElement('name', 'Opal Kole') ); $result->appendChild( $dom->createElement('sgpa', '8.1') ); $result->appendChild( $dom->createElement('cgpa', '8.4') ); echo ''. $dom->saveXML() .''; $dom->save('result.xml') or die('XML Create Error'); ?>

Manipulate XML using DOM

Manipulate above created XML file.

formatOutput = true; $dom->load('result.xml', LIBXML_NOBLANKS); $root = $dom->documentElement; $newresult = $root->appendChild( $dom->createElement('result') ); $newresult->setAttribute('id', 2); $newresult->appendChild( $dom->createElement('name','Max Miller') ); $newresult->appendChild( $dom->createElement('sgpa','8.7') ); $newresult->appendChild( $dom->createElement('cgpa','8.2') ); echo ''. $dom->saveXML() .''; $dom->save('new_result.xml') or die('XML Manipulate Error'); ?>
   Opal Kole 8.1 8.4  Max Miller 8.7 8.2  

Read XML using DOM

load('new_result.xml'); $root = $dom->documentElement; echo "This document is store " . $root->tagName . " Result Information" . "
"; $results = $root->getElementsByTagName( 'result' ); foreach( $results as $result)< echo 'Result Id: ' . $result->getAttribute('id'); foreach( $result->getElementsByTagName('name') as $name )< echo ' Student ' . $name->nodeValue; > foreach( $result->getElementsByTagName('sgpa') as $sgpa )< echo ' SGPA ' . $sgpa->nodeValue; > foreach( $result->getElementsByTagName('cgpa') as $cgpa )< echo ' CGPA ' . $cgpa->nodeValue . "
"; > > ?>
This document is store student Result Information Result Id: 1 Student Opal Kole SGPA 8.1 CGPA 8.4 Result Id: 2 Student Max Miller SGPA 8.7 CGPA 8.2

XML Reader/Writer Method

XML Reader/Writer Advantages

  • Uses little memory for reading and writing.
  • Allowing for accessing immediately.
  • Support PHP4+ and PHP5+.
Читайте также:  Пример простейших программ на питоне

XML Reader/Writer Disadvantages

XML Reader Example

open('new_result.xml'); while( $reader->read() )< if($reader->nodeType !== XMLReader::ELEMENT) < continue; >if($reader->localName === 'result')< echo 'Result Id: ' . $reader->getAttribute('id'); > if($reader->localName === 'name')< echo ' Student ' . $reader->readString(); > if($reader->localName === 'sgpa')< echo ' SGPA ' . $reader->readString(); > if($reader->localName === 'cgpa')< echo ' CGPA ' . $reader->readString() . "
";; > > ?>
Result Id: 1 Student Opal Kole SGPA 8.1 CGPA 8.4 Result Id: 2 Student Max Miller SGPA 8.7 CGPA 8.2

XML Writer Example

openUri('result.xml'); $writer->setIndentString(' '); $writer->setIndent(true); $writer->startDocument( '1.0', 'UTF-8' ); $writer->startElement('student'); $writer->startElement('result'); $writer->writeAttribute('id', '1'); $writer->writeElement('name', 'Opal Kole'); $writer->writeElement('sgpa', '8.1'); $writer->writeElement('cgpa', '8.4'); $writer->endElement(); /* */ $writer->flush(); $writer->endElement(); /* */ $writer->endDocument(); ?>

SimpleXML Reading/Writing

SimpleXML Writing

 '); $simple_xml->addChild('result'); $simple_xml->result[0]->addAttribute('id', 1); $simple_xml->result[0]->addChild('name', 'Opal Kole'); $simple_xml->result[0]->addChild('sgpa', '8.1'); $simple_xml->result[0]->addChild('cgpa', '8.4'); $simple_xml->asXML('simple_xml_create.xml'); ?>

SimpleXML Reading

result as $result)< echo 'Result Id: ' . $result['id'] . ' Student ' . $result->name . ' SGPA ' . $result->sgpa . ' CGPA ' . $result->cgpa . "
"; > ?>
Result Id: 1 Student Opal Kole SGPA 8.1 CGPA 8.4

Источник

Формирование файла sitemap.xml

Предполагается что в таблице стаей есть даты публикации и последнего изменения
( `date_add` и `date_edit` ).

// Подключение к БД. $dbh = new PDO('mysql:dbname=db_name;host=localhost', 'ЛОГИН', 'ПАРОЛЬ'); $out = ''; // Получение статей из БД. $sth = $dbh->prepare("SELECT * FROM `articles`"); $sth->execute(); $articles = $sth->fetchAll(PDO::FETCH_ASSOC); foreach ($articles as $row) < // Дата изменения статьи. $date = max(array($row['date_add'], $row['date_edit'])); $out .= ' https://example.com/articles/' . $row['id'] . '.html ' . date('Y-m-d', $date) . ' ' . ((($date + 604800) > time()) ? '1' : '0.5') . ' '; > $out .= ''; header('Content-Type: text/xml; charset=utf-8'); echo $out; exit();

Вариант на DOMDocument

// Подключение к БД. $dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль'); $dom = new DOMDocument('1.0', 'utf-8'); $urlset = $dom->createElement('urlset'); $urlset->setAttribute('xmlns','http://www.sitemaps.org/schemas/sitemap/0.9'); // Получение статей из БД. $sth = $dbh->prepare("SELECT * FROM `articles`"); $sth->execute(); $articles = $sth->fetchAll(PDO::FETCH_ASSOC); foreach($articles as $row) < // Дата изменения статьи. $date = max(array($row['date_add'], $row['date_edit'])); $url = $dom->createElement('url'); // Элемент - URL статьи. $loc = $dom->createElement('loc'); $text = $dom->createTextNode( htmlentities('https://example.com/articles/' . $row['id'] . '.html', ENT_QUOTES) ); $loc->appendChild($text); $url->appendChild($loc); // Элемент - дата последнего изменения статьи. $lastmod = $dom->createElement('lastmod'); $text = $dom->createTextNode(date('Y-m-d', $date)); $lastmod->appendChild($text); $url->appendChild($lastmod); // Элемент - приоритетность (от 0 до 1.0, по умолчанию 0.5). // Если дата публикации/изменения статьи была меньше недели назад ставим приоритет 1. $priority = $dom->createElement('priority'); $text = $dom->createTextNode((($date + 604800) > time()) ? '1' : '0.5'); $priority->appendChild($text); $url->appendChild($priority); $urlset->appendChild($url); > $dom->appendChild($urlset); // Сохранение в файл. $dom->save(__DIR__ . '/sitemap.xml'); // Или отправка в браузер. header('Content-Type: text/xml'); echo $dom->saveXML(); exit();

Результат:

   https://example.com/articles/16.html 2016-11-19 1  https://example.com/articles/3.html 2016-11-08 0.5  

Перенаправление с .php на .xml

Например данный скрипт лежит в корне сайта с именем sitemap.php, вы хотите чтобы он открывался по адресу https://example.com/sitemap.xml . В файле .htaccess нужно добавить запись:

RewriteEngine On RewriteRule ^sitemap.xml$ sitemap.php [L,QSA]

Если скрипт сделан модулем CMS:

RewriteEngine On RewriteCond % ^/sitemap.xml RewriteRule (.*) /index.php?module=sitemap [L,QSA]

Sitemap в robots.txt

Чтобы поисковые системы знали где расположен файл карты сайта нужно добавить директиву Sitemap в robots.txt:

User-agent: * Sitemap: https://example.com/sitemap.xml

Источник

Генерировать xml файл php

Этот пример демонстрирует создание XML-документа в памяти с помощью XMLWriter.

Пример #1 Создание простого XML-документа

$xw = xmlwriter_open_memory ();
xmlwriter_set_indent ( $xw , 1 );
$res = xmlwriter_set_indent_string ( $xw , ‘ ‘ );

xmlwriter_start_document ( $xw , ‘1.0’ , ‘UTF-8’ );

// Первый элемент
xmlwriter_start_element ( $xw , ‘tag1’ );

// Атрибут ‘att1’ для элемента ‘tag1’
xmlwriter_start_attribute ( $xw , ‘att1’ );
xmlwriter_text ( $xw , ‘valueofatt1’ );
xmlwriter_end_attribute ( $xw );

xmlwriter_write_comment ( $xw , ‘this is a comment.’ );

// Создаём дочерний элемент
xmlwriter_start_element ( $xw , ‘tag11’ );
xmlwriter_text ( $xw , ‘This is a sample text, ä’ );
xmlwriter_end_element ( $xw ); // tag11

xmlwriter_end_element ( $xw ); // tag1

// CDATA
xmlwriter_start_element ( $xw , ‘testc’ );
xmlwriter_write_cdata ( $xw , «This is cdata content» );
xmlwriter_end_element ( $xw ); // testc

xmlwriter_start_element ( $xw , ‘testc’ );
xmlwriter_start_cdata ( $xw );
xmlwriter_text ( $xw , «test cdata2» );
xmlwriter_end_cdata ( $xw );
xmlwriter_end_element ( $xw ); // testc

// Инструкции по обработке
xmlwriter_start_pi ( $xw , ‘php’ );
xmlwriter_text ( $xw , ‘$foo=2;echo $foo;’ );
xmlwriter_end_pi ( $xw );

echo xmlwriter_output_memory ( $xw );

Результат выполнения данного примера:

Источник

Генерация XML файла средствами PHP

Добрый вечер! Сегодня я расскажу, как генерировать XML файл с данными с помощью PHP на примере специального xml-файла в формате YMapsML. YMapsML – это формат файла с географическими данными, используюемый API Яндекс.Карт. В виде такого файла очень удобно передавать данные в Яндекс Карты, а если данные зависят от какого-либо параметра, то генерация такого файла с нужным набором данных Вам просто необходима.

Итак, рассмотрим нашу задачу более подробно.

Дано: mysql база, где в таблице содержаться данные для каждой метки (например, погода в различных городах по регионам) в виде: её названия, географических координат и описания метки.

Задача: создать YMapsML-файл с данными из базы, который затем можно напрямую подгружать в яндекс карты.

Ну что, приступим к решению! Однако, я сразу оговорюсь, что в данной статье я не буду подробно рассматривать задачу вывода данных из базы.

Первым делом нам надо дать знать браузеру или любому другому объекту, загружаемому наш файл, что это не php файл, как будет выдавать его сервер исходя из расширения, а xml-файл. Для этого напишем следующие строки кода.

Первой строкой мы указываем заголовок файла – теперь браузер будет знать, что это xml-файл. Вторая строка – это стандартный заголовок всех xml файлов, однако мы выводим его через PHP, т.к. если попытаться вывести его как простой код, то сервер выдаст ошибку из-за символов “”. Вот так!

Далее будет содержаться весь xml код нашего файла. Рассматриваемый в данной статье YMapsML файл в общем виде выглядит так.

    Название коллекции  Название метки Описание метки Координаты метки        

Как Вы видите, структура достаточно проста, однако некоторые моменты я поясню. Для вывода меток на карту, в любом количестве, необходимо их объединить в коллекцию, которая находиться внутри тэга . Если таких коллекций должно быть несколько, в нашем случае у нас коллекция меток по городам, объединённых по областям, то все коллекции располагаются “одна за другой”, а затем они заключаются в общую коллекцию. Данный трюк вы можете наблюдать в приведённом выше коде, однако в нём мы используем одну коллекцию, поэтому такое вложение бессмысленно, хотя и не является ошибкой. Такой код всё равно будет работать!

Теперь Вам, надеюсь, тоже стало очевидно, что для вывода множества меток из базы нам необходимо будет использовать в цикле конструкцию

 Название метки Описание метки Координаты метки   

Используя эту конструкцию внутри цикла, мы выводим поочерёдно все необходимые нам строки и получаем готовый xml-файл формата YMapsML, готовый для прямого его использования яндекс картами.

На этом всё! Мой опыт общения с API Яндекс.Карт продолжается, поэтому в будущем будут ещё статьи по этой теме. Если Вам что-то осталось непонятным или у Вас появились какие-либо вопросы, то смело задавайте их в комментариях к данному посту – я обязательно вам расскажу об этом поподробнее, возможно даже в виде нового поста.

Источник

Оцените статью