Installation:
composer require desperado/xml-bundle
Add to AppKernel.php:
new Desperado\XmlBundle\DesperadoXmlBundle(),
First Use Case:
Inject XmlEditor or XmlReader via dependency injection:
use Desperado\XmlBundle\Model\XmlEditor;
use Desperado\XmlBundle\Model\XmlReader;
class MyController extends Controller
{
public function __construct(XmlEditor $xmlEditor, XmlReader $xmlReader)
{
$this->xmlEditor = $xmlEditor;
$this->xmlReader = $xmlReader;
}
}
Quick Example: Generate XML from an array:
$data = ['book' => ['title' => 'Laravel', 'author' => 'Taylor']];
$xml = $this->xmlEditor->generate($data, 'books');
XML Generation:
XmlGenerator for structured XML output:
$generator = $this->get('desperado_xml.model.xml_generator');
$xml = $generator->generate(['root' => ['child' => 'value']], 'root');
XmlEditor for dynamic manipulation:
$this->xmlEditor->addAttribute('root', 'version', '1.0');
XML Parsing:
XmlReader:
$xmlString = '<root><child>value</child></root>';
$data = $this->xmlReader->parse($xmlString);
XmlPrep (if available):
$this->xmlReader->setNamespace('ns', 'http://example.com');
Integration with Laravel:
AppServiceProvider:
public function register()
{
$this->app->bind('desperado_xml.model.xml_reader', function ($app) {
return new XmlReader();
});
}
public function processXml(Request $request)
{
$xml = $request->xml; // Assume XML is passed
$data = $this->xmlReader->parse($xml);
// Process $data...
}
Validation:
$validator = Validator::make($data, [
'root.child' => 'required|string',
]);
Deprecated Bundle:
SimpleXML deprecations).Namespace Issues:
XmlPrep (if exposed).$this->xmlReader->setPreserveNamespaces(true);
Performance:
SimpleXMLIterator) is recommended for big files.Laravel-Specific Quirks:
app('desperado_xml.model.xml_reader') for direct access.Validate XML:
libxml_use_internal_errors(true) before parsing:
libxml_use_internal_errors(true);
$data = $this->xmlReader->parse($xml);
$errors = libxml_get_errors();
libxml_clear_errors();
Logging:
\Log::debug('XML Input:', ['xml' => $xmlString]);
Fallbacks:
DOMDocument):
try {
$data = $this->xmlReader->parse($xml);
} catch (\Exception $e) {
$data = $this->fallbackXmlParser($xml);
}
Custom Generators:
XmlGenerator for domain-specific rules:
class CustomXmlGenerator extends XmlGenerator
{
public function generate(array $data, string $root)
{
// Add custom logic
return parent::generate($data, $root);
}
}
AppServiceProvider:
$this->app->bind('desperado_xml.model.xml_generator', function () {
return new CustomXmlGenerator();
});
Event Listeners:
// Example (hypothetical event)
$dispatcher->addListener('xml.generate', function ($event) {
$event->getXml()->addAttribute('custom', 'value');
});
Configuration:
# config/packages/desperado_xml.yaml
desperado_xml:
preserve_namespaces: true
indent_output: true
How can I help you explore Laravel packages today?