PhpBench\Report\Renderer\XsltRenderer::render PHP Method

render() public method

Render the table.
public render ( PhpBench\Dom\Document $reportDom, Config $config )
$reportDom PhpBench\Dom\Document
$config PhpBench\Registry\Config
    public function render(Document $reportDom, Config $config)
    {
        $template = $config['template'];
        $out = strtr($config['file'], ['%report_name%' => $reportDom->firstChild->getAttribute('name')]);
        if (!file_exists($template)) {
            throw new \RuntimeException(sprintf('XSLT template file "%s" does not exist', $template));
        }
        foreach ($reportDom->query('.//row') as $rowEl) {
            $formatterParams = [];
            foreach ($rowEl->query('./formatter-param') as $paramEl) {
                $formatterParams[$paramEl->getAttribute('name')] = $paramEl->nodeValue;
            }
            foreach ($rowEl->query('./cell') as $cellEl) {
                $value = $cellEl->nodeValue;
                if ('' !== $value && $cellEl->hasAttribute('class')) {
                    $classes = explode(' ', $cellEl->getAttribute('class'));
                    $value = $this->formatter->applyClasses($classes, $value, $formatterParams);
                    $cellEl->nodeValue = $value;
                }
            }
        }
        $stylesheetDom = new \DOMDocument('1.0');
        $stylesheetDom->load($template);
        $xsltProcessor = new \XsltProcessor();
        $xsltProcessor->importStylesheet($stylesheetDom);
        $xsltProcessor->setParameter(null, 'title', $config['title']);
        $xsltProcessor->setParameter(null, 'phpbench-version', PhpBench::VERSION);
        $xsltProcessor->setParameter(null, 'date', date('Y-m-d H:i:s'));
        $output = $xsltProcessor->transformToXml($reportDom);
        if (!$output) {
            throw new \InvalidArgumentException(sprintf('Could not render report with XSL file "%s"', $template));
        }
        if ($out) {
            file_put_contents($out, $output);
            $this->output->writeln('Dumped XSLT report:');
            $this->output->writeln($out);
        } else {
            $this->output->write($output);
        }
    }