/** * Gets the DOM element for this value * @return DOMElement The element of this value */ public function getXmlElement() { $dom = new DOMDocument('1.0', 'utf-8'); $dom->preserveWhiteSpace = false; $type = $this->getType(); $valueElement = $dom->createElement('value'); $typeElement = $dom->createElement($type); if ($type == self::TYPE_ARRAY) { $array = $this->getValue(); $dataElement = $dom->createElement('data'); foreach ($array as $value) { if ($value instanceof Value) { $parameter = $value; } else { $parameter = new self($value); } $parameterElement = $dom->importNode($parameter->getXmlElement(), true); $dataElement->appendChild($parameterElement); } $typeElement->appendChild($dataElement); } elseif ($type == self::TYPE_STRUCT) { $struct = $this->getValue(); if ($struct) { foreach ($struct as $key => $value) { $memberElement = $dom->createElement('member'); $typeElement->appendChild($memberElement); $nameElement = $dom->createElement('name'); $nameElement->appendChild($dom->createTextNode($key)); $memberElement->appendChild($nameElement); if ($value instanceof Value) { $parameter = $value; } else { $parameter = new self($value); } $parameterElement = $dom->importNode($parameter->getXmlElement(), true); $memberElement->appendChild($parameterElement); } } else { $typeElement = $dom->createElement(self::TYPE_NIL); } } elseif ($type == self::TYPE_BOOLEAN) { $typeElement->appendChild($dom->createTextNode($this->getValue() ? '1' : '0')); } elseif ($type !== self::TYPE_NIL) { $typeElement->appendChild($dom->createTextNode($this->getValue())); } $valueElement->appendChild($typeElement); $dom->appendChild($valueElement); return $valueElement; }