Add formatoutput option to Xml::fromArray

This commit is contained in:
Ceeram 2013-03-13 13:00:09 +01:00
parent 026df62a1f
commit fc34d9fe7f
2 changed files with 87 additions and 1 deletions

View file

@ -402,6 +402,87 @@ XML;
$this->assertXmlStringEqualsXmlString($expected, $obj->asXML());
}
/**
* testFromArrayFormatOutput method
*
* @return void
*/
public function testFromArrayFormatOutput() {
$xml = array(
'tags' => array(
'tag' => array(
array(
'id' => '1',
'name' => 'defect'
),
array(
'id' => '2',
'name' => 'enhancement'
)
)
)
);
$expected = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<tags><tag><id>1</id><name>defect</name></tag><tag><id>2</id><name>enhancement</name></tag></tags>
XML;
$xmlResponse = Xml::fromArray($xml, array('formatOutput' => false));
$this->assertEquals($expected, $xmlResponse->asXML());
$expected = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<tags>
<tag>
<id>1</id>
<name>defect</name>
</tag>
<tag>
<id>2</id>
<name>enhancement</name>
</tag>
</tags>
XML;
$xmlResponse = Xml::fromArray($xml, array('formatOutput' => true));
$this->assertEquals($expected, $xmlResponse->asXML());
$xml = array(
'tags' => array(
'tag' => array(
array(
'id' => '1',
'name' => 'defect'
),
array(
'id' => '2',
'name' => 'enhancement'
)
)
)
);
$expected = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<tags><tag id="1" name="defect"/><tag id="2" name="enhancement"/></tags>
XML;
$xmlResponse = Xml::fromArray($xml, array('formatOutput' => false, 'format' => 'attributes'));
$this->assertEquals($expected, $xmlResponse->asXML());
$expected = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<tags>
<tag id="1" name="defect"/>
<tag id="2" name="enhancement"/>
</tags>
XML;
$xmlResponse = Xml::fromArray($xml, array('formatOutput' => true, 'format' => 'attributes'));
$this->assertEquals($expected, $xmlResponse->asXML());
}
/**
* data provider for fromArray() failures
*

View file

@ -150,6 +150,7 @@ class Xml {
* ### Options
*
* - `format` If create childs ('tags') or attributes ('attribute').
* - `formatOutput` Returns formatted Xml
* - `version` Version of XML document. Default is 1.0.
* - `encoding` Encoding of XML document. If null remove from XML header. Default is the some of application.
* - `return` If return object of SimpleXMLElement ('simplexml') or DOMDocument ('domdocument'). Default is SimpleXMLElement.
@ -197,11 +198,15 @@ class Xml {
'format' => 'tags',
'version' => '1.0',
'encoding' => Configure::read('App.encoding'),
'return' => 'simplexml'
'return' => 'simplexml',
'formatOutput' => false
);
$options = array_merge($defaults, $options);
$dom = new DOMDocument($options['version'], $options['encoding']);
if ($options['formatOutput'] === true) {
$dom->formatOutput = true;
}
self::_fromArray($dom, $dom, $input, $options['format']);
$options['return'] = strtolower($options['return']);