openMemory(); } else { if (!is_dir($pTemporaryStorageDir)) { $pTemporaryStorageDir = sys_get_temp_dir(); } // Create temporary filename $this->tempFileName = @tempnam($pTemporaryStorageDir, 'xml'); // Open storage $this->openUri($this->tempFileName); } if ($compatibility) { $this->setIndent(false); $this->setIndentString(''); } else { $this->setIndent(true); $this->setIndentString(' '); } } /** * Destructor */ public function __destruct() { // Unlink temporary files if (empty($this->tempFileName)) { return; } if (PHP_OS != 'WINNT' && @unlink($this->tempFileName) === false) { throw new \Exception('The file ' . $this->tempFileName . ' could not be deleted.'); } } /** * Get written data * * @return string */ public function getData() { if ($this->tempFileName == '') { return $this->outputMemory(true); } $this->flush(); return file_get_contents($this->tempFileName); } /** * 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 */ public function writeElementBlock($element, $attributes, $value = null) { $this->startElement($element); if (!is_array($attributes)) { $attributes = array($attributes => $value); } foreach ($attributes as $attribute => $value) { $this->writeAttribute($attribute, $value); } $this->endElement(); } /** * 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->writeElement($element, $value); } else { $this->startElement($element); $this->writeAttribute($attribute, $value); $this->endElement(); } } } /** * Write attribute if ... * * @param bool $condition * @param string $attribute * @param mixed $value */ public function writeAttributeIf($condition, $attribute, $value) { if ($condition == true) { $this->writeAttribute($attribute, $value); } } /** * @param string $name * @param mixed $value * @return bool */ public function writeAttribute($name, $value) { if (is_float($value)) { $value = json_encode($value); } return parent::writeAttribute($name, $value); } }