kiwilan / php-xml-reader
PHP package to read XML with nice API.
Fund package maintenance!
kiwilan
Installs: 42 043
Dependents: 4
Suggesters: 0
Security: 0
Stars: 6
Watchers: 1
Forks: 1
Open Issues: 2
pkg:composer/kiwilan/php-xml-reader
Requires
- php: ^8.0
Requires (Dev)
- laravel/pint: ^1.2
- pestphp/pest: ^1.20
- phpstan/phpstan: ^1.10
- spatie/ray: ^1.28
This package is auto-updated.
Last update: 2025-10-13 22:04:37 UTC
README
PHP package to read XML with nice API, heavily inspired by stackoverflow answer.
About
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.
Requirements
- PHP version >= 8.0
Installation
You can install the package via composer:
composer require kiwilan/php-xml-reader
Usage
You can read XML from path or from content.
mapContent:booleanIf a key has only@contentkey, return only the value of@content. Default:true.failOnError:booleanThrow exception if XML is invalid. Default:true.
use Kiwilan\XmlReader\XmlReader; $xml = XmlReader::make('path/to/file.xml', bool $mapContent = true, bool $failOnError = true);
Methods
| 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 |
Advanced methods
| 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 |
Basic usage
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
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
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
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']);
Get content
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);
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Credits
spatieforspatie/package-skeleton-php
License
The MIT License (MIT). Please see License File for more information.
