diff --git a/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php b/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php index e6f5ff9b0e..91d42a49ee 100644 --- a/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php +++ b/src/Symfony/Component/Serializer/Encoder/XmlEncoder.php @@ -54,8 +54,15 @@ class XmlEncoder extends AbstractEncoder implements DecoderInterface public function decode($data, $format) { $xml = simplexml_load_string($data); - if (!$xml->count()) { + if (!$xml->count() && !$xml->attributes()) { return (string) $xml; + } elseif (!$xml->count()) { + $data = array(); + foreach ($xml->attributes() as $attrkey => $attr) { + $data['@'.$attrkey] = (string) $attr; + } + $data['#'] = (string) $xml; + return $data; } return $this->parseXml($xml); } @@ -157,14 +164,14 @@ class XmlEncoder extends AbstractEncoder implements DecoderInterface private function parseXml($node) { $data = array(); + if ($node->attributes()) { + foreach ($node->attributes() as $attrkey => $attr) { + $data['@'.$attrkey] = (string) $attr; + } + } foreach ($node->children() as $key => $subnode) { if ($subnode->count()) { $value = $this->parseXml($subnode); - if ($subnode->attributes()) { - foreach ($subnode->attributes() as $attrkey => $attr) { - $value['@'.$attrkey] = (string) $attr; - } - } } elseif ($subnode->attributes()) { $value = array(); foreach ($subnode->attributes() as $attrkey => $attr) {