/** * setElementValue * * @param DOMNode $DOMNode * @param mixed $value */ protected function setElementValue($DOMNode, $value = null) { switch (true) { case $this->isSimpleXMLElement($value): $node = dom_import_simplexml($value); $node = $this->dom->importNode($node, true); $DOMNode->appendChild($node); break; case $value instanceof \DOMDocument: $DOMNode->appendDomElement($value->firstChild); break; case $value instanceof \DOMNode: $this->dom->appendDomElement($value, $DOMNode); break; case is_array($value) || $value instanceof \Traversable: $this->buildXML($DOMNode, $value); return true; case is_numeric($value): if (is_string($value)) { return $this->createTextNodeWithTypeAttribute($DOMNode, (string) $value, 'string'); } return $this->createText($DOMNode, (string) $value); case is_bool($value): return $this->createText($DOMNode, $value ? 'yes' : 'no'); case is_string($value): if (preg_match('/(<|>|&)/i', $value)) { return $this->createCDATASection($DOMNode, $value); } return $this->createText($DOMNode, $value); default: return $value; } }