noki / xml-converter
Laravel XML Converter is Laravel package for converting XML to JSON and XML to array.
Requires
- php: ^8.0
- ext-dom: *
- ext-libxml: *
- ext-simplexml: *
README
๐งพ Introduction
Since I started working with Laravel, I always wanted a simple helper that could convert XML files to JSON.
I created the first version of this package to do exactly that. While the package isn't perfect, it can handle a wide range of XML inputs. If you find any issues, feel free to report them.
I should note that this package was created with the help of AI. In my case, I used ChatGPT, and it saved me many hours of coding.
โ What does this package do?
This package provides a flexible and powerful way to convert XML strings to JSON or PHP arrays. It supports:
- DTD and XSD validation
- Namespace tagging
- CDATA handling
๐ Installation
Requirements
- PHP >= 8.1
- Laravel >= 9
- PHP Extensions:
simplexml
libxml
dom
Composer Installation
composer require noki/xml-converter
โ๏ธ PHP Extensions Setup
Linux (Debian/Ubuntu)
sudo apt-get update sudo apt-get install php-simplexml php-xml php-dom
Example for PHP 8.3 โ be sure to use the correct package names:
First, check your PHP version:
php -v
Then install extensions for your version:
sudo apt-get install php8.3-simplexml php8.3-xml php8.3-dom
macOS (with Homebrew)
brew install php
# OR, if PHP is already installed:
brew reinstall php
Required extensions (
simplexml
,libxml
,dom
) are bundled with PHP on macOS.
Windows
- Open your
php.ini
file. - Ensure the following lines are uncommented (remove the
;
at the beginning):
extension=simplexml extension=dom extension=libxml
- Restart your web server (Apache, Nginx) or PHP-FPM.
๐ฆ Usage
Namespace
use Noki\XmlConverter\Convert;
1. Convert XML to JSON
$json = Convert::xmlToJson($xmlString);
2. Convert XML to array
$array = Convert::xmlToArray($xmlString);
3. Full control with options
$array = Convert::xmlToArray( $xmlString, namespace_in_tag_name: true, is_cdata: true, schema_path: '/path/to/schema.xsd' // or '' to enable DTD validation );
namespace_in_tag_name
: If true, keys will include namespace prefixes (e.g.,ns:tag
).is_cdata
: If true, CDATA sections are preserved as-is.schema_path
:- Path to an
.xsd
file for XSD validation. - Use
''
(empty string) to enable DTD validation (your XML must contain<!DOCTYPE ...>
). - Use
null
to skip validation.
- Path to an
4. Convert XML to JSON with options
$json = Convert::xmlToJson( $xmlString, namespace_in_tag_name: true, is_cdata: false, schema_path: null );
๐งช Example
Sample XML with namespaces and CDATA
$xml = <<<XML <book xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="book.xsd"> <title><![CDATA[The Great Gatsby]]></title> <author>F. Scott Fitzgerald</author> <year>1925</year> </book> XML; $json = Convert::xmlToJson($xml, true, true, '/path/to/book.xsd');
๐ Error Handling
- If the XML is invalid, an
InvalidArgumentException
will be thrown. - If schema validation fails, a descriptive exception is thrown (with optional logging).
- CDATA sections and empty tags are handled gracefully.
๐งฉ Integration with Laravel
You can use this package in controllers, services, or jobs:
use Noki\XmlConverter\Convert; $data = Convert::xmlToArray($request->getContent(), true);
๐ License
MIT License. See LICENSE.md for details.
๐ Contributing
Feel free to fork and submit a PR! Bug reports and feature requests are always welcome.
๐ Author
๐ Changelog
Please see CHANGELOG.md for recent updates.