noki/xml-converter

Laravel XML Converter is Laravel package for converting XML to JSON and XML to array.

v1.0.0 2025-05-30 22:20 UTC

This package is auto-updated.

Last update: 2025-05-30 20:32:45 UTC


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

  1. Open your php.ini file.
  2. Ensure the following lines are uncommented (remove the ; at the beginning):
extension=simplexml
extension=dom
extension=libxml
  1. 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.

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.