fXmlRpc\Parser\NativeParser::parse PHP Method

parse() public method

public parse ( $xmlString )
    public function parse($xmlString)
    {
        if ($this->validateResponse) {
            XmlChecker::validXml($xmlString);
        }
        $result = xmlrpc_decode($xmlString, 'UTF-8');
        if ($result === null && self::isBiggerThanParseLimit($xmlString)) {
            throw ParserException::xmlrpcExtensionLibxmlParsehugeNotSupported();
        }
        $toBeVisited = [&$result];
        while (isset($toBeVisited[0]) && ($value =& $toBeVisited[0])) {
            $type = gettype($value);
            if ($type === 'object') {
                $xmlRpcType = $value->{'xmlrpc_type'};
                if ($xmlRpcType === 'datetime') {
                    $value = DateTime::createFromFormat('Ymd\\TH:i:s', $value->scalar, isset($timezone) ? $timezone : ($timezone = new DateTimeZone('UTC')));
                } elseif ($xmlRpcType === 'base64') {
                    if ($value->scalar !== '') {
                        $value = Base64::serialize($value->scalar);
                    } else {
                        $value = null;
                    }
                }
            } elseif ($type === 'array') {
                foreach ($value as &$element) {
                    $toBeVisited[] =& $element;
                }
            }
            array_shift($toBeVisited);
        }
        if (is_array($result)) {
            reset($result);
            if (xmlrpc_is_fault($result)) {
                throw FaultException::fault($result);
            }
        }
        return $result;
    }

Usage Example

Beispiel #1
0
 public function testExceptionIsThrownIfXmlIsTooBig()
 {
     $parser = new NativeParser(false);
     $this->setExpectedException(ParserException::class, 'Parsing huge XML responses using libxml’s LIBXML_PARSEHUGE flag is not supported in ext/xmlrpc');
     $parser->parse(str_repeat('0', 1024 * 1024 * 10 + 1));
 }