Auth_Yadis_XRDS::parseXRDS PHP Method

parseXRDS() static public method

Parse an XML string (XRDS document) and return either a Auth_Yadis_XRDS object or null, depending on whether the XRDS XML is valid.
static public parseXRDS ( string $xml_string, $extra_ns_map = null ) : mixed
$xml_string string An XRDS XML string.
return mixed $xrds An instance of Auth_Yadis_XRDS or null, depending on the validity of $xml_string
    static function parseXRDS($xml_string, $extra_ns_map = null)
    {
        $_null = null;
        if (!$xml_string) {
            return $_null;
        }
        $parser = Auth_Yadis_getXMLParser();
        $ns_map = Auth_Yadis_getNSMap();
        if ($extra_ns_map && is_array($extra_ns_map)) {
            $ns_map = array_merge($ns_map, $extra_ns_map);
        }
        if (!($parser && $parser->init($xml_string, $ns_map))) {
            return $_null;
        }
        // Try to get root element.
        $root = $parser->evalXPath('/xrds:XRDS[1]');
        if (!$root) {
            return $_null;
        }
        if (is_array($root)) {
            $root = $root[0];
        }
        $attrs = $parser->attributes($root);
        if (array_key_exists('xmlns:xrd', $attrs) && $attrs['xmlns:xrd'] != Auth_Yadis_XMLNS_XRDS) {
            return $_null;
        } else {
            if (array_key_exists('xmlns', $attrs) && preg_match('/xri/', $attrs['xmlns']) && $attrs['xmlns'] != Auth_Yadis_XMLNS_XRD_2_0) {
                return $_null;
            }
        }
        // Get the last XRD node.
        $xrd_nodes = $parser->evalXPath('/xrds:XRDS[1]/xrd:XRD');
        if (!$xrd_nodes) {
            return $_null;
        }
        $xrds = new Auth_Yadis_XRDS($parser, $xrd_nodes);
        return $xrds;
    }

Usage Example

Exemplo n.º 1
0
 function query($xri, $service_types, $filters = array())
 {
     $services = array();
     $canonicalID = null;
     foreach ($service_types as $service_type) {
         $url = $this->queryURL($xri, $service_type);
         $response = $this->fetcher->get($url);
         if ($response->status != 200 and $response->status != 206) {
             continue;
         }
         $xrds = Auth_Yadis_XRDS::parseXRDS($response->body);
         if (!$xrds) {
             continue;
         }
         $canonicalID = Auth_Yadis_getCanonicalID($xri, $xrds);
         if ($canonicalID === false) {
             return null;
         }
         $some_services = $xrds->services($filters);
         $services = array_merge($services, $some_services);
         // TODO:
         //  * If we do get hits for multiple service_types, we're
         //    almost certainly going to have duplicated service
         //    entries and broken priority ordering.
     }
     return array($canonicalID, $services);
 }
All Usage Examples Of Auth_Yadis_XRDS::parseXRDS