xmlWriter = new \XMLWriter(); // Open temporary storage if ($tempLocation == self::STORAGE_MEMORY) { $this->xmlWriter->openMemory(); } else { // Create temporary filename $this->tempFile = tempnam($tempFolder, 'xml'); // Fallback to memory when temporary file cannot be used // @codeCoverageIgnoreStart // Can't find any test case. Uncomment when found. if (false === $this->tempFile || false === $this->xmlWriter->openUri($this->tempFile)) { $this->xmlWriter->openMemory(); } // @codeCoverageIgnoreEnd } // 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 * @throws \BadMethodCallException */ public function __call($function, $args) { // Catch exception if (method_exists($this->xmlWriter, $function) === false) { throw new \BadMethodCallException("Method '{$function}' does not exists."); } // Run method 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 simple element and attribute(s) block * * There are two options: * 1. If the `$attributes` is an array, then it's an associative array of attributes * 2. If not, then it's a simple attribute-value pair * * @param string $element * @param string|array $attributes * @param string $value * @return void */ public function writeElementBlock($element, $attributes, $value = null) { $this->xmlWriter->startElement($element); if (!is_array($attributes)) { $attributes = array($attributes => $value); } foreach ($attributes as $attribute => $value) { $this->xmlWriter->writeAttribute($attribute, $value); } $this->xmlWriter->endElement(); } /** * Write element if ... * * @param bool $condition * @param string $element * @param string $attribute * @param mixed $value * @return void */ 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 * @return void */ public function writeAttributeIf($condition, $attribute, $value) { if ($condition == true) { $this->xmlWriter->writeAttribute($attribute, $value); } } }