Generating xml from php

XML on the Server

XML can easily be stored and generated by a standard web server.

Storing XML Files on the Server

XML files can be stored on an Internet server exactly the same way as HTML files.

Start Windows Notepad and write the following lines:

Save the file on your web server with a proper name like «note.xml».

Generating XML with PHP

XML can be generated on a server without any installed XML software.

To generate an XML response from the server using PHP, use following code:

Note that the content type of the response header must be set to «text/xml».

If you want to study PHP, you will find our PHP tutorial on our homepage.

Generating XML with ASP

To generate an XML response from the server — simply write the following code and save it as an ASP file on the web server:

Note that the content type of the response must be set to «text/xml».

If you want to study ASP, you will find our ASP tutorial on our homepage.

Generating XML From a Database

XML can be generated from a database without any installed XML software.

To generate an XML database response from the server, simply write the following code and save it as an ASP file on the web server:

<%
response.ContentType = «text/xml»
set conn=Server.CreateObject(«ADODB.Connection»)
conn.provider=»Microsoft.Jet.OLEDB.4.0;»
conn.open server.mappath(«/datafolder/database.mdb»)

sql=»select fname,lname from tblGuestBook»
set rs=Conn.Execute(sql)

The example above uses ASP with ADO.

If you want to study ASP and ADO, you will find the tutorials on our homepage.

Transforming XML with XSLT on the Server

This ASP transforms an XML file to XHTML on the server:

<%
‘Load XML
set xml = Server.CreateObject(«Microsoft.XMLDOM»)
xml.async = false
xml.load(Server.MapPath(«simple.xml»))

‘Load XSL
set xsl = Server.CreateObject(«Microsoft.XMLDOM»)
xsl.async = false
xsl.load(Server.MapPath(«simple.xsl»))

‘Transform file
Response.Write(xml.transformNode(xsl))
%>

  • The first block of code creates an instance of the Microsoft XML parser (XMLDOM), and loads the XML file into memory.
  • The second block of code creates another instance of the parser and loads the XSL file into memory.
  • The last line of code transforms the XML document using the XSL document, and sends the result as XHTML to your browser. Nice!
Читайте также:  Html body border left

Источник

Конструктор XML-строки из PHP-массива

Как часто приходится работать с XML PHP-разработчикам? Не так часто, на самом деле. Обычно потребность возникает при интеграции со сторонним сервисом, такие как BetaPRO, OnTime или CDEK. И вот тут обычно возникает такая ситуация, когда ваш код становится похожим на

$date = '2016-09-25T12:45:10'; $account = 'f62dcb094cc91617def72d9c260b4483'; $secure = '81ad561784277fa864bf644d755fb164'; $count = 1; $copy = 4; $dispatchNumber = '1033229706'; $orderDate = '2016-09-25T12:45:10'; $request =  " Date=""/> XML;

и это еще не все! Нужно позаботиться о том, чтобы значения атрибутов и содержимое, заключенное в теги, не содержало спецсимволов, присущие XML. Если для конкретно этого запроса можно быть уверенным, что ничего из спецсимволов сюда не попадет, то контролировать каждый запрос вовсе бы не хотелось. Поэтому через «фильтр» пропускается все. Отсюда следует, что нужно еще «загнаться» с htmlspecialchars или с CDATA , или с XMLWriter , и знать, как это применить и не раз еще «свернуть себе кровь». Как вы видите, времени стоит «убить» достаточно, а результат-то хочется уже сейчас. Эх… А как хотелось бы, чтобы XML можно было бы создавать так же быстро, как JSON: отдал массив, а тебе XML-строку, и никаких заморочек. Опечалившись сложившейся ситуацией я в далеком 2015ом году я решил сделать такой конструктор.

Вашему вниманию представляю xml-constructor для PHP начиная с версии 5.4 и до 7.2 на момент публикации данной статьи.

Использование

Для начала использования установим данный пакет через Composer:

$ composer require bupy7/xml-constructor

Его так же можно просто скопировать вручную куда вы хотите, т.к. пакет не имеет никаких доп. зависимостей, кроме как наличия libxml в самом PHP.

Теперь создадим XML-строку используя PHP-массив:

$date = '2016-09-25T12:45:10'; $account = 'f62dcb094cc91617def72d9c260b4483'; $secure = '81ad561784277fa864bf644d755fb164'; $count = 1; $copy = 4; $dispatchNumber = '1033229706'; $orderDate = '2016-09-25T12:45:10'; $in = [ [ 'tag' => 'OrdersPrint', 'attributes' => [ 'Date' => $date, 'Account' => $account, 'Secure' => $secure, 'OrderCount' => $count, 'CopyCount' => $copy, ], 'elements' => [ [ 'tag' => 'Order', 'attributes' => [ 'DispathNumber' => $dispatchNumber, 'Date' => $orderDate, ], ], ], ], ]; $request = (new \bupy7\xml\constructor\XmlConstructor())->fromArray($in)->toOutput();

Вот и вся работа! Об остальном позаботится xml-constructor .

И давайте попробуем передать что-то «запрещенное» в значения и посмотрим, как будет вести себя xml-constructor :

$date = '2016-09-25T12:45:10'; $secure = '81ad561784277fa864bf644d755fb164'; $count = 1; $copy = 4; $dispatchNumber = '1033229706'; $orderDate = '2016-09-25T12:45:10'; // ACHTUNG . $account = ''; $orderContent = '"chars"'; $in = [ [ 'tag' => 'OrdersPrint', 'attributes' => [ 'Date' => $date, 'Account' => $account, 'Secure' => $secure, 'OrderCount' => $count, 'CopyCount' => $copy, ], 'elements' => [ [ 'tag' => 'Order', 'attributes' => [ 'DispathNumber' => $dispatchNumber, 'Date' => $orderDate, ], 'content' => $orderContent, ], ], ], ]; $request = (new \bupy7\xml\constructor\XmlConstructor())->fromArray($in)->toOutput();

Требования

Создание XML-строки сводится к тому, что нужно передать PHP-массив с нужными ключами и в правильной структуре. Ключей всего четыре:

  • tag — строка с названием тега;
  • content — содержимое заключенное между тегом;
  • attributes — массив ключ-значение, где ключ — это, название атрибута (строка), а значение — его значение (строка);
  • elements — новая вложенность тегов внутри которого этот ключ был указан. Также будет содержать в себе все перечисленные выше элементы. Вложенность неограниченная.

Каждый элемент массива должен содержать массив с одним ключом tag , как минимум. Ключи attributes , content и elements необязательные.

Первый уровень вложенности есть ничто иное, как корни XML-документа, т.е.:

$in = [ [ 'tag' => 'FirstRoot', ], [ 'tag' => 'SecondRoot', 'content' => 'Content of SecondRoot', ], ]; $request = (new \bupy7\xml\constructor\XmlConstructor())->fromArray($in)->toOutput();

Конфигурация

Из конфигурации все только самое необходимое.

  • indentString — произвольная строка для отступов. По умолчанию 4 пробела. Если не хотите использовать отступы вообще — передайте false .
  • startDocument — массив ключ-значение с атрибутами XML декларации документа. По умолчанию это . Если вам не нужна декларация — передайте false .

Для применения конфигурации нужно передать массив ключ-значение в конструктор первым аргументом:

$date = '2016-09-25T12:45:10'; $account = 'f62dcb094cc91617def72d9c260b4483'; $secure = '81ad561784277fa864bf644d755fb164'; $count = 1; $copy = 4; $dispatchNumber = '1033229706'; $orderDate = '2016-09-25T12:45:10'; $in = [ [ 'tag' => 'OrdersPrint', 'attributes' => [ 'Date' => $date, 'Account' => $account, 'Secure' => $secure, 'OrderCount' => $count, 'CopyCount' => $copy, ], 'elements' => [ [ 'tag' => 'Order', 'attributes' => [ 'DispathNumber' => $dispatchNumber, 'Date' => $orderDate, ], ], ], ], ]; $request = (new \bupy7\xml\constructor\XmlConstructor([ 'indentString' => '****', 'startDocument' => false, ])) ->fromArray($in) ->toOutput();

Заключение

Расширение очень простое и привносит массу удобств во время интеграции с сервисами использующими XML для своего API. Стоит ли использовать xml-constructor — решать только вам.

Спасибо за потраченное на прочтение время!

Источник

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

Источник

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