openMemory(); } else { if ($pTemporaryStorageDir && !\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 * * @return void */ public function writeElementBlock(string $element, $attributes, string $value = null) { $this->startElement($element); if (!\is_array($attributes)) { $attributes = [$attributes => $value]; } foreach ($attributes as $attribute => $value) { $this->writeAttribute($attribute, $value); } $this->endElement(); } /** * Write element if ... * * @param bool $condition * @param string $element * @param string|null $attribute * @param mixed $value * * @return void */ public function writeElementIf(bool $condition, string $element, ?string $attribute = null, $value = null) { if ($condition) { 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 * * @return void */ public function writeAttributeIf(bool $condition, string $attribute, $value) { if ($condition) { $this->writeAttribute($attribute, $value); } } /** * @param string $name * @param mixed $value * * @return bool */ public function writeAttribute($name, $value): bool { if (\is_float($value)) { $value = \json_encode($value); } return parent::writeAttribute($name, $value ?? ''); } }