output = new XMLWriter(); $this->output->openMemory(); $this->output->startElement('m:oMathPara'); $this->output->writeAttribute('xmlns:m', 'http://schemas.openxmlformats.org/officeDocument/2006/math'); $this->output->startElement('m:oMath'); foreach ($math->getElements() as $element) { $this->writeElementItem($element); } $this->output->endElement(); $this->output->endElement(); return $this->output->outputMemory(); } protected function writeElementItem(Element\AbstractElement $element): void { // Element\Row if ($element instanceof Element\Row) { foreach ($element->getElements() as $childElement) { $this->writeElementItem($childElement); } return; } // Element\Fraction if ($element instanceof Element\Fraction) { $this->output->startElement($this->getElementTagName($element)); $this->output->startElement('m:num'); $this->writeElementItem($element->getNumerator()); $this->output->endElement(); $this->output->startElement('m:den'); $this->writeElementItem($element->getDenominator()); $this->output->endElement(); $this->output->endElement(); return; } if ($element instanceof Element\Identifier || $element instanceof Element\Numeric || $element instanceof Element\Operator) { $this->output->startElement('m:r'); $this->output->startElement('m:t'); $this->output->text((string) $element->getValue()); $this->output->endElement(); $this->output->endElement(); return; } // Check if managed $this->getElementTagName($element); } protected function getElementTagName(Element\AbstractElement $element): string { // Group if ($element instanceof Element\AbstractGroupElement) { /* throw new NotImplementedException(sprintf( '%s : The element of the class `%s` has no tag name', __METHOD__, get_class($element) )); */ } if ($element instanceof Element\Fraction) { return 'm:f'; } throw new NotImplementedException(sprintf( '%s : The element of the class `%s` has no tag name', __METHOD__, get_class($element) )); } }