\Cake\UtilityXml

XML handling for CakePHP.

The methods in these classes enable the datasources that use XML to work.

Summary

Methods
Properties
Constants
build()
loadHtml()
fromArray()
toArray()
No public properties found
No constants found
_loadXml()
_fromArray()
_createChild()
_toArray()
No protected properties found
N/A
No private methods found
No private properties found
N/A

Methods

build()

build(string|array  $input, array  $options = array()) : \SimpleXMLElement|\DOMDocument

Initialize SimpleXMLElement or DOMDocument from a given XML string, file path, URL or array.

Usage:

Building XML from a string:

$xml = Xml::build('<example>text</example>');

Building XML from string (output DOMDocument):

$xml = Xml::build('<example>text</example>', ['return' => 'domdocument']);

Building XML from a file path:

$xml = Xml::build('/path/to/an/xml/file.xml');

Building XML from a remote URL:

use Cake\Http\Client;

$http = new Client();
$response = $http->get('http://example.com/example.xml');
$xml = Xml::build($response->body());

Building from an array:

 $value = [
     'tags' => [
         'tag' => [
             [
                 'id' => '1',
                 'name' => 'defect'
             ],
             [
                 'id' => '2',
                 'name' => 'enhancement'
             ]
         ]
     ]
 ];
$xml = Xml::build($value);

When building XML from an array ensure that there is only one top level element.

Options

  • return Can be 'simplexml' to return object of SimpleXMLElement or 'domdocument' to return DOMDocument.
  • loadEntities Defaults to false. Set to true to enable loading of <!ENTITY definitions. This is disabled by default for security reasons.
  • readFile Set to false to disable file reading. This is important to disable when putting user data into Xml::build(). If enabled local files will be read if they exist. Defaults to true for backwards compatibility reasons.
  • parseHuge Enable the LIBXML_PARSEHUGE flag.

If using array as input, you can pass options from Xml::fromArray.

Parameters

string|array $input

XML string, a path to a file, a URL or an array

array $options

The options to use

Throws

\Cake\Utility\Exception\XmlException

Returns

\SimpleXMLElement|\DOMDocument —

SimpleXMLElement or DOMDocument

loadHtml()

loadHtml(string  $input, array  $options = array()) : \SimpleXMLElement|\DOMDocument

Parse the input html string and create either a SimpleXmlElement object or a DOMDocument.

Parameters

string $input

The input html string to load.

array $options

The options to use. See Xml::build()

Throws

\Cake\Utility\Exception\XmlException

Returns

\SimpleXMLElement|\DOMDocument

fromArray()

fromArray(array|\Cake\Collection\Collection  $input, string|array  $options = array()) : \SimpleXMLElement|\DOMDocument

Transform an array into a SimpleXMLElement

Options

  • format If create childs ('tags') or attributes ('attributes').
  • pretty Returns formatted Xml when set to true. Defaults to false
  • version Version of XML document. Default is 1.0.
  • encoding Encoding of XML document. If null remove from XML header. Default is the some of application.
  • return If return object of SimpleXMLElement ('simplexml') or DOMDocument ('domdocument'). Default is SimpleXMLElement.

Using the following data:

$value = [
   'root' => [
       'tag' => [
           'id' => 1,
           'value' => 'defect',
           '@' => 'description'
        ]
    ]
];

Calling Xml::fromArray($value, 'tags'); Will generate:

<root><tag><id>1</id><value>defect</value>description</tag></root>

And calling Xml::fromArray($value, 'attributes'); Will generate:

<root><tag id="1" value="defect">description</tag></root>

Parameters

array|\Cake\Collection\Collection $input

Array with data or a collection instance.

string|array $options

The options to use or a string to use as format.

Throws

\Cake\Utility\Exception\XmlException

Returns

\SimpleXMLElement|\DOMDocument —

SimpleXMLElement or DOMDocument

toArray()

toArray(\SimpleXMLElement|\DOMDocument|\DOMNode  $obj) : array

Returns this XML structure as an array.

Parameters

\SimpleXMLElement|\DOMDocument|\DOMNode $obj

SimpleXMLElement, DOMDocument or DOMNode instance

Throws

\Cake\Utility\Exception\XmlException

Returns

array —

Array representation of the XML structure.

_loadXml()

_loadXml(string  $input, array  $options) : \SimpleXMLElement|\DOMDocument

Parse the input data and create either a SimpleXmlElement object or a DOMDocument.

Parameters

string $input

The input to load.

array $options

The options to use. See Xml::build()

Throws

\Cake\Utility\Exception\XmlException

Returns

\SimpleXMLElement|\DOMDocument

_fromArray()

_fromArray(\DOMDocument  $dom, \DOMElement  $node, array  $data, string  $format) : void

Recursive method to create childs from array

Parameters

\DOMDocument $dom

Handler to DOMDocument

\DOMElement $node

Handler to DOMElement (child)

array $data

Array of data to append to the $node.

string $format

Either 'attributes' or 'tags'. This determines where nested keys go.

Throws

\Cake\Utility\Exception\XmlException

_createChild()

_createChild(array  $data) : void

Helper to _fromArray(). It will create childs of arrays

Parameters

array $data

Array with information to create childs

_toArray()

_toArray(\SimpleXMLElement  $xml, array  $parentData, string  $ns, array  $namespaces) : void

Recursive method to toArray

Parameters

\SimpleXMLElement $xml

SimpleXMLElement object

array $parentData

Parent array with data

string $ns

Namespace of current child

array $namespaces

List of namespaces in XML