xmlWriter = new \XMLWriter(); // Open temporary storage if ($tempLocation == self::STORAGE_MEMORY) { $this->xmlWriter->openMemory(); } else { // Create temporary filename $this->tempFile = @tempnam($tempFolder, 'xml'); // Open storage if ($this->xmlWriter->openUri($this->tempFile) === false) { // Fallback to memory... $this->xmlWriter->openMemory(); } } // Set xml Compatibility $compatibility = Settings::hasCompatibility(); if ($compatibility) { $this->xmlWriter->setIndent(false); $this->xmlWriter->setIndentString(''); } else { $this->xmlWriter->setIndent(true); $this->xmlWriter->setIndentString(' '); } } /** * Destructor */ public function __destruct() { // Destruct XMLWriter unset($this->xmlWriter); // Unlink temporary files if ($this->tempFile != '') { @unlink($this->tempFile); } } /** * Catch function calls (and pass them to internal XMLWriter) * * @param mixed $function * @param mixed $args */ public function __call($function, $args) { try { @call_user_func_array(array($this->xmlWriter, $function), $args); } catch (\Exception $ex) { // Do nothing! } } /** * Get written data * * @return string XML data */ public function getData() { if ($this->tempFile == '') { return $this->xmlWriter->outputMemory(true); } else { $this->xmlWriter->flush(); return file_get_contents($this->tempFile); } } /** * Write element if ... * * @param bool $condition * @param string $element * @param string $attribute * @param mixed $value */ public function writeElementIf($condition, $element, $attribute = null, $value = null) { if ($condition == true) { if (is_null($attribute)) { $this->xmlWriter->writeElement($element, $value); } else { $this->xmlWriter->startElement($element); $this->xmlWriter->writeAttribute($attribute, $value); $this->xmlWriter->endElement(); } } } /** * Write attribute if ... * * @param bool $condition * @param string $attribute * @param mixed $value */ public function writeAttributeIf($condition, $attribute, $value) { if ($condition == true) { $this->xmlWriter->writeAttribute($attribute, $value); } } }