From b774ecd39acc3c03803794d8ba01073398f4b578 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Mon, 7 Dec 2015 11:06:03 +0100 Subject: [PATCH] added a new namespaceAware() deserializer function --- composer.json | 3 +- lib/functions.php | 44 ++++++++++++++++++++++ tests/Sabre/XML/FunctionsTest.php | 62 +++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 lib/functions.php create mode 100644 tests/Sabre/XML/FunctionsTest.php diff --git a/composer.json b/composer.json index 0af75ec..5db55e3 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,8 @@ "autoload" : { "psr-4" : { "Sabre\\Xml\\" : "lib/" - } + }, + "files": ["lib/functions.php"] }, "bin" : [ ], diff --git a/lib/functions.php b/lib/functions.php new file mode 100644 index 0000000..237cc87 --- /dev/null +++ b/lib/functions.php @@ -0,0 +1,44 @@ +isEmptyElement) { + $reader->next(); + return []; + } + + $values = []; + + $reader->read(); + do { + + if ($reader->nodeType === Reader::ELEMENT) { + if ($reader->namespaceURI == $namespace) { + $values[$reader->localName] = $reader->parseCurrentElement()['value']; + } else { + $clark = $reader->getClark(); + $values[$clark] = $reader->parseCurrentElement()['value']; + } + } else { + $reader->read(); + } + } while ($reader->nodeType !== Reader::END_ELEMENT); + + $reader->read(); + + return $values; +} diff --git a/tests/Sabre/XML/FunctionsTest.php b/tests/Sabre/XML/FunctionsTest.php new file mode 100644 index 0000000..3e8d1ea --- /dev/null +++ b/tests/Sabre/XML/FunctionsTest.php @@ -0,0 +1,62 @@ + + + + + hi + + foo + foo & bar + + + +BLA; + + $reader = new Reader(); + $reader->elementMap = [ + '{http://sabredav.org/ns}struct' => function(Reader $reader) { + return namespaceAware($reader, 'http://sabredav.org/ns'); + } + ]; + $reader->xml($input); + $output = $reader->parse(); + + $this->assertEquals([ + 'name' => '{http://sabredav.org/ns}root', + 'value' => [ + [ + 'name' => '{http://sabredav.org/ns}struct', + 'value' => [ + 'elem1' => null, + 'elem2' => 'hi', + '{http://sabredav.org/another-ns}elem3' => [ + [ + 'name' => '{http://sabredav.org/another-ns}elem4', + 'value' => 'foo', + 'attributes' => [], + ], + [ + 'name' => '{http://sabredav.org/another-ns}elem5', + 'value' => 'foo & bar', + 'attributes' => [], + ], + ] + ], + 'attributes' => [], + ] + ], + 'attributes' => [], + ], $output); + } +}