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.
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
- PHP >= 8.1
- Laravel >= 9
- PHP Extensions:
simplexmllibxmldom
composer require noki/laravel-xml-convertersudo apt-get update
sudo apt-get install php-simplexml php-xml php-domExample for PHP 8.3 — be sure to use the correct package names:
First, check your PHP version:
php -vThen install extensions for your version:
sudo apt-get install php8.3-simplexml php8.3-xml php8.3-dombrew install php
# OR, if PHP is already installed:
brew reinstall phpRequired extensions (
simplexml,libxml,dom) are bundled with PHP on macOS.
- Open your
php.inifile. - 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.
use Noki\XmlConverter\Convert;$json = Convert::xmlToJson($xmlString);$array = Convert::xmlToArray($xmlString);$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
.xsdfile for XSD validation. - Use
''(empty string) to enable DTD validation (your XML must contain<!DOCTYPE ...>). - Use
nullto skip validation.
- Path to an
$json = Convert::xmlToJson(
$xmlString,
namespace_in_tag_name: true,
is_cdata: false,
schema_path: null
);$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');- If the XML is invalid, an
InvalidArgumentExceptionwill be thrown. - If schema validation fails, a descriptive exception is thrown (with optional logging).
- CDATA sections and empty tags are handled gracefully.
You can use this package in controllers, services, or jobs:
use Noki\XmlConverter\Convert;
$data = Convert::xmlToArray($request->getContent(), true);MIT License. See LICENSE.md for details.
Feel free to fork and submit a PR! Bug reports and feature requests are always welcome.
Please see CHANGELOG.md for recent updates.