PHP package to read XML with nice API, heavily inspired by stackoverflow answer
.
PHP have native functions to read XML files with SimpleXML
, but it's not easy to use and not very flexible. This package offer to read XML files as array, with a simple and flexible API.
- PHP version >= 8.0
You can install the package via composer:
composer require kiwilan/php-xml-reader
You can read XML from path or from content.
mapContent
:boolean
If a key has only@content
key, return only the value of@content
. Default:true
.failOnError
:boolean
Throw exception if XML is invalid. Default:true
.
use Kiwilan\XmlReader\XmlReader;
$xml = XmlReader::make('path/to/file.xml', bool $mapContent = true, bool $failOnError = true);
Method | Description | Type |
---|---|---|
$xml->getRoot() |
Value of root element | ?string |
$xml->getRootNS() |
Namespaces of root element | string[] |
$xml->getRootAttributes() |
Attributes of root element | array<string, mixed> |
$xml->getRootAttributes('key'); |
Value of key attribute of root element |
mixed |
$xml->getVersion(); |
XML version | ?string |
$xml->getEncoding(); |
XML encoding | ?string |
$xml->isValidXml(); |
Check if XML is valid | bool |
$xml->getPath(); |
Path of XML file | ?string |
$xml->getFilename(); |
Filename of XML file | ?string |
$xml->getConverter(); |
Converter used to convert XML to array | \Kiwilan\XmlReader\XmlConverter |
$xml->save('path/to/file.xml'); |
Save XML file | bool |
$xml->toArray(); |
Convert XML to array | array<string, mixed> |
$xml->__toString(); |
Convert XML to string | string |
Method | Description | Type | Options |
---|---|---|---|
$xml->getContents() |
XML as multidimensional array | array<string, mixed> |
|
$xml->find('key') |
Find key will return first value where that contain key | array<string, mixed> |
strict , content , attributes |
$xml->search('key') |
Search will return all values that contain key | mixed |
|
$xml->extract(...keys) |
Extract metadata key, if not found return null |
mixed |
|
XmlReader::parseContent(key) |
Parse content of entry | mixed |
|
XmlReader::parseAttributes(key) |
Parse attributes of entry | array<string, mixed> or null |
XML as multidimensional array from root
(safe).
use Kiwilan\XmlReader\XmlReader;
$xml = XmlReader::make('path/to/file.xml');
$contents = $xml->getContents();
Basic usage.
use Kiwilan\XmlReader\XmlReader;
$xml = XmlReader::make('path/to/file.xml');
$contents = $xml->getContents();
$title = $contents['metadata']['dc:title'] ?? null;
Find key will return first value where key that contain title
(safe).
use Kiwilan\XmlReader\XmlReader;
$xml = XmlReader::make('path/to/file.xml');
$title = $xml->find('title', strict: false);
Find key will return first value where key is dc:title
(safe)
use Kiwilan\XmlReader\XmlReader;
$xml = XmlReader::make('path/to/file.xml');
$dcTitle = $xml->find('dc:title');
Find key will return first value where key that contain dc:title
and return @content
(safe)
use Kiwilan\XmlReader\XmlReader;
$xml = XmlReader::make('path/to/file.xml');
$dcCreator = $xml->find('dc:creator', content: true);
Find key will return first value where key contain dc:creator
and return @attributes
(safe)
use Kiwilan\XmlReader\XmlReader;
$xml = XmlReader::make('path/to/file.xml');
$dcCreator = $xml->find('dc:creator', attributes: true);
Search will return all values that contain dc
(safe)
use Kiwilan\XmlReader\XmlReader;
$xml = XmlReader::make('path/to/file.xml');
$dc = $xml->search('dc');
Extract metadata
key, if not found return null (safe)
use Kiwilan\XmlReader\XmlReader;
$xml = XmlReader::make('path/to/file.xml');
$rootKey = $xml->extract('metadata');
Extract metadata
and dc:title
keys (safe)
use Kiwilan\XmlReader\XmlReader;
$xml = XmlReader::make('path/to/file.xml');
$subSubKey = $xml->extract(['metadata', 'dc:title']);
If you want to extract only @content
you could use parseContent()
method, if you want to extract only @attributes
you could use parseAttributes()
method.
Extract dc:title
key and return @content
(safe)
use Kiwilan\XmlReader\XmlReader;
$xml = XmlReader::make('path/to/file.xml');
$title = $xml->extract(['metadata', 'dc:title']);
$title = XmlReader::parseContent($title);
Extract dc:creator
key and return @content
(safe)
use Kiwilan\XmlReader\XmlReader;
$xml = XmlReader::make('path/to/file.xml');
$creator = $xml->extract(['metadata', 'dc:creator']);
$creator = XmlReader::parseContent($creator);
Extract dc:creator
key and return @attributes
(safe)
use Kiwilan\XmlReader\XmlReader;
$xml = XmlReader::make('path/to/file.xml');
$creatorAttributes = $xml->extract(['metadata', 'dc:creator']);
$creatorAttributes = XmlReader::parseAttributes($creatorAttributes);
composer test
Please see CHANGELOG for more information on what has changed recently.
spatie
forspatie/package-skeleton-php
The MIT License (MIT). Please see License File for more information.