@ 2017-07-10T14:11:29Z <?php
$xml = '<?xml version="1.0" encoding="utf-8" ?>
<soap-env>
<person name="Max Musterman">
<car marke="BMW" kennung="i8"/>
<phone name="iPhone">9</phone>
<birth-place>Hamburg</birth-place>
<address>
<street>Hauptstraße 1</street>
<plz>245698</plz>
</address>
</person>
<person name="Dr. Dolittle">
<car marke="Audi" kennung="A3"/>
<phone name="Sony">Xperia Z3</phone>
<birth-place>München</birth-place>
<address>
<street>Partkstraße</street>
<plz>365494</plz>
</address>
</person>
</soap-env>';
$doc = new DomDocument('1.0', 'utf-8');
$doc->loadXml($xml);
final class Hydrator
{
private $callbacks = [];
public function __construct(array $callbacks = [])
{
$this->setCallbacks($callbacks);
}
public function setCallback(string $nodeName, callable $callback): void
{
$this->callbacks[$nodeName] = $callback;
}
public function setCallbacks(array $callbacks): void
{
foreach ($callbacks as $nodeName => $callback) {
$this->setCallback($nodeName, $callback);
}
}
public function hydrate(DOMNode $node)
{
$this->apply($node);
foreach ($node->childNodes as $child) {
$this->apply($child);
}
}
private function apply(DomNode $node)
{
if (array_key_exists($node->nodeName, $this->callbacks)) {
print $callback($node, $this);
} else {
print $node->nodeName . PHP_EOL;
}
}
}
$hydrator = new Hydrator();
$hydrator->hydrate($doc->documentElement);
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 7.1.0 - 7.1.33 , 7.2.0 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.7 soap-env
#text
person
#text
person
#text
Output for 7.0.0 - 7.0.31 Fatal error: Uncaught TypeError: Return value of Hydrator::setCallbacks() must be an instance of void, none returned in /in/vDrDS:47
Stack trace:
#0 /in/vDrDS(34): Hydrator->setCallbacks(Array)
#1 /in/vDrDS(68): Hydrator->__construct()
#2 {main}
thrown in /in/vDrDS on line 47
Process exited with code 255 . preferences:dark mode live preview
172.9 ms | 402 KiB | 235 Q