2 namespace Consolidation\OutputFormatters\Formatters;
4 use Symfony\Component\Console\Output\OutputInterface;
5 use Symfony\Component\Console\Helper\Table;
6 use Symfony\Component\Console\Helper\TableStyle;
8 use Consolidation\OutputFormatters\Validate\ValidDataTypesInterface;
9 use Consolidation\OutputFormatters\Options\FormatterOptions;
10 use Consolidation\OutputFormatters\Validate\ValidDataTypesTrait;
11 use Consolidation\OutputFormatters\StructuredData\TableDataInterface;
12 use Consolidation\OutputFormatters\Transformations\ReorderFields;
13 use Consolidation\OutputFormatters\Exception\IncompatibleDataException;
14 use Consolidation\OutputFormatters\StructuredData\Xml\DomDataInterface;
17 * Display a table of data with the Symfony Table class.
19 * This formatter takes data of either the RowsOfFields or
20 * PropertyList data type. Tables can be rendered with the
21 * rows running either vertically (the normal orientation) or
22 * horizontally. By default, associative lists will be displayed
23 * as two columns, with the key in the first column and the
24 * value in the second column.
26 class XmlFormatter implements FormatterInterface, ValidDataTypesInterface
28 use ValidDataTypesTrait;
30 public function __construct()
34 public function validDataTypes()
38 new \ReflectionClass('\DOMDocument'),
39 new \ReflectionClass('\ArrayObject'),
46 public function validate($structuredData)
48 if ($structuredData instanceof \DOMDocument) {
49 return $structuredData;
51 if ($structuredData instanceof DomDataInterface) {
52 return $structuredData->getDomData();
54 if ($structuredData instanceof \ArrayObject) {
55 return $structuredData->getArrayCopy();
57 if (!is_array($structuredData)) {
58 throw new IncompatibleDataException(
61 $this->validDataTypes()
64 return $structuredData;
70 public function write(OutputInterface $output, $dom, FormatterOptions $options)
73 $schema = $options->getXmlSchema();
74 $dom = $schema->arrayToXML($dom);
76 $dom->formatOutput = true;
77 $output->writeln($dom->saveXML());