File tree Expand file tree Collapse file tree 2 files changed +26
-5
lines changed Expand file tree Collapse file tree 2 files changed +26
-5
lines changed Original file line number Diff line number Diff line change @@ -222,17 +222,20 @@ public static function xmlToVariable(DOMElement $element)
222
222
case 'array ' :
223
223
$ variable = array ();
224
224
225
- foreach ($ element ->getElementsByTagName ('element ' ) as $ element ) {
226
- $ item = $ element ->childNodes ->item (0 );
225
+ foreach ($ element ->childNodes as $ entry ) {
226
+ if (!$ entry instanceof DOMElement || $ entry ->tagName !== 'element ' ) {
227
+ continue ;
228
+ }
229
+ $ item = $ entry ->childNodes ->item (0 );
227
230
228
231
if ($ item instanceof DOMText) {
229
- $ item = $ element ->childNodes ->item (1 );
232
+ $ item = $ entry ->childNodes ->item (1 );
230
233
}
231
234
232
235
$ value = self ::xmlToVariable ($ item );
233
236
234
- if ($ element ->hasAttribute ('key ' )) {
235
- $ variable [(string ) $ element ->getAttribute ('key ' )] = $ value ;
237
+ if ($ entry ->hasAttribute ('key ' )) {
238
+ $ variable [(string ) $ entry ->getAttribute ('key ' )] = $ value ;
236
239
} else {
237
240
$ variable [] = $ value ;
238
241
}
Original file line number Diff line number Diff line change @@ -342,4 +342,22 @@ public function testLoadBoolean()
342
342
{
343
343
PHPUnit_Util_XML::load (false );
344
344
}
345
+
346
+ public function testNestedXmlToVariable ()
347
+ {
348
+ $ xml = '<array><element key="a"><array><element key="b"><string>foo</string></element></array></element><element key="c"><string>bar</string></element></array> ' ;
349
+ $ dom = new DOMDocument ();
350
+ $ dom ->loadXML ($ xml );
351
+
352
+ $ expected = [
353
+ 'a ' => [
354
+ 'b ' => 'foo ' ,
355
+ ],
356
+ 'c ' => 'bar ' ,
357
+ ];
358
+
359
+ $ actual = PHPUnit_Util_XML::xmlToVariable ($ dom ->documentElement );
360
+
361
+ $ this ->assertSame ($ expected , $ actual );
362
+ }
345
363
}
You can’t perform that action at this time.
0 commit comments