/** * Recursively walk through the element tree and write elements to the * XMLWriter instance. * * @param XMLWriter $writer * @param Polycast_XmlRpc_Generator_Element $element * @return void */ protected function _generateXml(XMLWriter $writer, Polycast_XmlRpc_Generator_Element $element) { $writer->startElement($element->getName()); foreach ($element->getChildren() as $child) { if ($child instanceof Polycast_XmlRpc_Generator_Element) { /* @var $child Polycast_XmlRpc_Generator_Element */ $this->_generateXml($writer, $child); } elseif ($child instanceof Polycast_XmlRpc_Value) { /* @var $child Polycast_XmlRpc_Value */ $writer->writeRaw($child->saveXml()); } else { $writer->text($child); } } $writer->endElement(); }
/** * Return the XML code that represent struct native MXL-RPC value * * @return string */ public function saveXML() { if (!$this->_as_xml) { // The XML code was not calculated yet $generator = $this->getGenerator(); // assemble envelope $element = new Polycast_XmlRpc_Generator_Element('value', array($struct = new Polycast_XmlRpc_Generator_Element('struct'))); // assemble members if (is_array($this->_value)) { foreach ($this->_value as $name => $val) { /* @var $val Polycast_XmlRpc_Value */ $struct->appendChild(new Polycast_XmlRpc_Generator_Element('member', array(new Polycast_XmlRpc_Generator_Element('name', array($name)), $val))); } } $this->_as_xml = $this->_stripXmlDeclaration($generator->generateXml($element)); } return $this->_as_xml; }
/** * Builds the document recursively. * * @param DOMDocument $dom * @param Polycast_XmlRpc_Generator_Element $element * @param DOMElement $rootNode * @return void */ protected function _generateXml(DOMDocument $dom, Polycast_XmlRpc_Generator_Element $element, DOMElement $rootNode = null) { $node = $dom->createElement($element->getName()); if (is_null($rootNode)) { $dom->appendChild($node); } else { $rootNode->appendChild($node); } foreach ($element->getChildren() as $child) { if ($child instanceof Polycast_XmlRpc_Generator_Element) { /* @var $child Polycast_XmlRpc_Generator_Element */ $this->_generateXml($dom, $child, $node); } elseif ($child instanceof Polycast_XmlRpc_Value) { /* @var $child Polycast_XmlRpc_Value */ $importNode = new DOMDocument(); $importNode->loadXML($child->saveXML()); $node->appendChild($dom->importNode($importNode->documentElement, true)); } else { $node->appendChild($dom->createTextNode($child)); } } }
/** * Create XML request * * @return string */ public function saveXML() { $args = $this->_getXmlRpcParams(); $method = $this->getMethod(); $generator = Polycast_XmlRpc_Value::getGenerator(); $element = new Polycast_XmlRpc_Generator_Element('methodCall', array(new Polycast_XmlRpc_Generator_Element('methodName', array($method)))); if (is_array($args) && count($args)) { $params = new Polycast_XmlRpc_Generator_Element('params'); $element->appendChild($params); foreach ($args as $arg) { /* @var $arg Polycast_XmlRpc_Value */ $params->appendChild(new Polycast_XmlRpc_Generator_Element('param', array($arg))); } } return $generator->generateXml($element); }