Skip to content

Commit be51e2c

Browse files
committed
[Serializer] xml empty array encoding
1 parent 9c413a3 commit be51e2c

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

src/Symfony/Component/Serializer/Encoder/XmlEncoder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ private function buildXml(\DOMNode $parentNode, mixed $data, string $format, arr
378378
}
379379
} elseif (\is_array($data) && !is_numeric($key)) {
380380
// Is this array fully numeric keys?
381-
if (!$preserveNumericKeys && null === array_find_key($data, static fn ($v, $k) => is_string($k))) {
381+
if (!$preserveNumericKeys && $data && null === array_find_key($data, static fn ($v, $k) => \is_string($k))) {
382382
/*
383383
* Create nodes to append to $parentNode based on the $key of this array
384384
* Produces <xml><item>0</item><item>1</item></xml>

src/Symfony/Component/Serializer/Tests/Encoder/XmlEncoderTest.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1069,12 +1069,24 @@ public function testDecodeArrayAsItem()
10691069
</response>
10701070
XML;
10711071
$expected = ['person' => [
1072-
['@key' => 0, 'firstname' => 'Benjamin', 'lastname' => 'Alexandre', ],
1073-
['@key' => 1, 'firstname' => 'Damien', 'lastname' => 'Clay', ],
1072+
['@key' => 0, 'firstname' => 'Benjamin', 'lastname' => 'Alexandre'],
1073+
['@key' => 1, 'firstname' => 'Damien', 'lastname' => 'Clay'],
10741074
]];
10751075

10761076
$this->assertSame($expected, $this->encoder->decode($source, 'xml', [
10771077
XmlEncoder::PRESERVE_NUMERIC_KEYS => true,
10781078
]));
10791079
}
1080+
1081+
public function testEncodeEmptyArrayWithoutPreservingKeys()
1082+
{
1083+
$source = ['person' => []];
1084+
$expected = <<<'XML'
1085+
<?xml version="1.0"?>
1086+
<response><person/></response>
1087+
1088+
XML;
1089+
1090+
$this->assertSame($expected, $this->encoder->encode($source, 'xml'));
1091+
}
10801092
}

0 commit comments

Comments
 (0)