protected function addXml(\XMLWriter $writer, Parameter $param, $value)
    {
        $value = $param->filter($value);
        $type = $param->getType();
        $name = $param->getWireName();
        $prefix = null;
        $namespace = $param->getData('xmlNamespace');
        if (false !== strpos($name, ':')) {
            list($prefix, $name) = explode(':', $name, 2);
        }

        if ($type == 'object' || $type == 'array') {
            if (!$param->getData('xmlFlattened')) {
                if ($namespace) {
                    $writer->startElementNS(null, $name, $namespace);
                } else {
                    $writer->startElement($name);
                }
            }
            if ($param->getType() == 'array') {
                $this->addXmlArray($writer, $param, $value);
            } elseif ($param->getType() == 'object') {
                $this->addXmlObject($writer, $param, $value);
            }
            if (!$param->getData('xmlFlattened')) {
                $writer->endElement();
            }
            return;
        }
        if ($param->getData('xmlAttribute')) {
            $this->writeAttribute($writer, $prefix, $name, $namespace, $value);
        } else {
            $this->writeElement($writer, $prefix, $name, $namespace, $value);
        }
    }
protected function addXml(\XMLWriter $writer, Parameter $param, $value)
    {
        $value = $param->filter($value);
        $type = $param->getType();
        $name = $param->getWireName();
        $prefix = null;
        $namespace = $param->getData('xmlNamespace');
        if (false !== strpos($name, ':')) {
            list($prefix, $name) = explode(':', $name, 2);
        }

        if ($type == 'object' || $type == 'array') {
            if (!$param->getData('xmlFlattened')) {
                if ($namespace) {
                    $writer->startElementNS(null, $name, $namespace);
                } else {
                    $writer->startElement($name);
                }
            }
            if ($param->getType() == 'array') {
                $this->addXmlArray($writer, $param, $value);
            } elseif ($param->getType() == 'object') {
                $this->addXmlObject($writer, $param, $value);
            }
            if (!$param->getData('xmlFlattened')) {
                $writer->endElement();
            }
            return;
        }
        if ($param->getData('xmlAttribute')) {
            $this->writeAttribute($writer, $prefix, $name, $namespace, $value);
        } else {
            $this->writeElement($writer, $prefix, $name, $namespace, $value);
        }
    }
protected function addXml ( \ XMLWriter $ writer , Parameter $ param , $ value ) { $ value = $ param -> filter ( $ value ) ; $ type = $ param -> getType ( ) ; $ name = $ param -> getWireName ( ) ; $ prefix = null ; $ namespace = $ param -> getData ( 'xmlNamespace' ) ; if ( false !== strpos ( $ name , ':' ) ) { list ( $ prefix , $ name ) = explode ( ':' , $ name , 2 ) ; } if ( $ type == 'object' || $ type == 'array' ) { if ( ! $ param -> getData ( 'xmlFlattened' ) ) { if ( $ namespace ) { $ writer -> startElementNS ( null , $ name , $ namespace ) ; } else { $ writer -> startElement ( $ name ) ; } } if ( $ param -> getType ( ) == 'array' ) { $ this -> addXmlArray ( $ writer , $ param , $ value ) ; } elseif ( $ param -> getType ( ) == 'object' ) { $ this -> addXmlObject ( $ writer , $ param , $ value ) ; } if ( ! $ param -> getData ( 'xmlFlattened' ) ) { $ writer -> endElement ( ) ; } return ; } if ( $ param -> getData ( 'xmlAttribute' ) ) { $ this -> writeAttribute ( $ writer , $ prefix , $ name , $ namespace , $ value ) ; } else { $ this -> writeElement ( $ writer , $ prefix , $ name , $ namespace , $ value ) ; } }
Recursively build the XML body

@param \XMLWriter $writer XML to modify
@param Parameter  $param     API Parameter
@param mixed      $value     Value to add
Recursively build the XML body