- var_dump: documentation ( source)
- libxml_get_errors: documentation ( source)
- join: documentation ( source)
<?php
function fromXML(XMLReader $xml)
{
$node = [];
while ($xml->read()) {
if (!$xml->isValid()) {
$xmlErrors = libxml_get_errors();
$errorLines = array();
foreach ($xmlErrors as $error) {
$errorLines[] = 'Line: ' . $error->line . ' Column: ' . $error->column . ' - ' . $error->message;
}
throw new Exception(join("", $errorLines));
}
switch ($xml->nodeType) {
case XMLReader::END_ELEMENT:
return (count($node) > 0) ? $node : null;
case XMLReader::ELEMENT:
$node[$xml->name] = ($xml->isEmptyElement ? '' : $this->fromXML($xml));
break;
case XMLReader::TEXT:
case XMLReader::CDATA:
$node = $xml->value;
break;
}
}
return $node;
}
$data = '<?xml version="1.0" encoding="UTF-8"?>
<request>
<header>
<version>0.6</version>
<dateTime>2017-07-05T11:21:46</dateTime>
<sender>PROVIDER</sender>
<recipient>dfsafdaf</recipient>
<messageType>isvalid</messageType>
</header>
<voucher>
<voucherId>1</voucherId>
</voucher>
</request>';
$xml = new XMLReader();
$xml->xml($data);
var_dump(fromXML($xml));