Installation
composer require openlss/lib-array2xml
Add to composer.json if not auto-loaded:
"autoload": {
"psr-4": {
"App\\": "app/",
"OpenLSS\\Lib\\": "vendor/openlss/lib-array2xml/src/"
}
}
Run composer dump-autoload.
First Use Case Convert a simple PHP array to XML:
use OpenLSS\Lib\Array2Xml;
$array = [
'book' => [
'title' => 'Laravel Best Practices',
'author' => 'Jane Doe',
'chapters' => [
['title' => 'Routing', 'pages' => 20],
['title' => 'Middleware', 'pages' => 15]
]
]
];
$xml = Array2Xml::convert($array);
echo $xml;
Output:
<book>
<title>Laravel Best Practices</title>
<author>Jane Doe</author>
<chapters>
<item>
<title>Routing</title>
<pages>20</pages>
</item>
<item>
<title>Middleware</title>
<pages>15</pages>
</item>
</chapters>
</book>
API Response Transformation Convert Eloquent collections or API responses to XML for legacy integrations:
$users = User::all()->toArray();
$xmlResponse = Array2Xml::convert($users, 'users');
return response($xmlResponse, 200)->header('Content-Type', 'application/xml');
Form Data Handling Parse XML payloads (e.g., from SOAP) back into arrays:
use OpenLSS\Lib\Xml2Array;
$xmlPayload = '<order><id>123</id><items><item><name>Laptop</name><price>999</price></item></items></order>';
$arrayData = Xml2Array::convert($xmlPayload);
Dynamic XML Generation
Use with Laravel’s View or Blade for dynamic XML templates:
$data = ['products' => Product::all()];
$xml = Array2Xml::convert($data);
return view('export.xml', ['xml' => $xml]);
Laravel Service Providers Bind the converter as a singleton for reuse:
public function register()
{
$this->app->singleton('array2xml', function () {
return new Array2Xml();
});
}
Usage:
$xml = app('array2xml')->convert($data);
Request Validation Validate XML payloads before conversion:
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'xml_data' => 'required|string',
]);
if ($validator->fails()) abort(422, 'Invalid XML data');
Caching XML Outputs Cache frequent conversions (e.g., large datasets):
$cachedXml = Cache::remember('xml_export_key', 3600, function () use ($data) {
return Array2Xml::convert($data);
});
Attribute Handling
By default, the package converts arrays with attributes keys into XML attributes. If this behavior is unexpected:
// Disable attributes (treat as normal child nodes)
$xml = Array2Xml::convert($array, null, false, false);
Special Characters
XML entities (e.g., &, <, >) in array values may break output. Escape manually:
$array['note'] = htmlspecialchars($array['note'], ENT_XML1);
Nested Arrays
Arrays with mixed keys (e.g., [0 => 'value', 'key' => 'value']) may produce inconsistent XML. Normalize keys:
$normalized = array_values($array); // Force sequential keys
Root Node Naming
Omitting the root node name (null as second argument) may generate <root> instead of no root. Explicitly pass null:
$xml = Array2Xml::convert($array, null); // No root node
Validate XML Output
Use PHP’s DOMDocument to validate:
$dom = new DOMDocument();
$dom->loadXML($xml);
if ($dom->schemaValidate('schema.xsd')) {
// Valid XML
}
Check for Silent Failures The package may silently fail on malformed arrays. Add error handling:
try {
$xml = Array2Xml::convert($data);
} catch (\Exception $e) {
Log::error("XML conversion failed: " . $e->getMessage());
abort(500, 'XML generation error');
}
Custom Naming Strategies Override default key-to-tag conversion:
$converter = new Array2Xml();
$converter->setKeyNameCallback(function ($key) {
return strtolower(preg_replace('/(?!^)([A-Z])/', '_$1', $key));
});
$xml = $converter->convert($array);
Pre/Post-Processing Extend the converter class to add logic:
class CustomArray2Xml extends Array2Xml {
public function convert($array) {
$array = $this->preProcess($array);
return parent::convert($array);
}
protected function preProcess($array) {
// Add custom logic (e.g., sanitize, transform)
return $array;
}
}
Laravel Facades Create a facade for cleaner syntax:
// app/Facades/XmlConverter.php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class XmlConverter extends Facade {
protected static function getFacadeAccessor() { return 'array2xml'; }
}
Usage:
use App\Facades\XmlConverter;
$xml = XmlConverter::convert($data);
How can I help you explore Laravel packages today?