Beispiel #1
0
 /**
  * Creates a Map of devices from the xml file
  *
  * @param string $fileName path to the xml file to parse
  * @return Map of <deviceId ModelDevice>
  */
 public static function parse($fileName, $validationSchema)
 {
     $devicesMap = array();
     $deviceID = null;
     $groupID = null;
     $reader = new XMLReader();
     $reader->open($fileName);
     $fullFileName = dirname(__FILE__) . DIRECTORY_SEPARATOR . $validationSchema;
     $reader->setRelaxNGSchema($fullFileName);
     libxml_use_internal_errors(TRUE);
     while ($reader->read()) {
         if (!$reader->isValid()) {
             throw new Exception(libxml_get_last_error()->message);
         }
         $nodeName = $reader->name;
         switch ($reader->nodeType) {
             case XMLReader::ELEMENT:
                 switch ($nodeName) {
                     case WURFL_Xml_Interface::DEVICE:
                         $groupIDCapabilitiesMap = array();
                         $deviceID = $reader->getAttribute(WURFL_Xml_Interface::ID);
                         $userAgent = $reader->getAttribute(WURFL_Xml_Interface::USER_AGENT);
                         $fallBack = $reader->getAttribute(WURFL_Xml_Interface::FALL_BACK);
                         $actualDeviceRoot = $reader->getAttribute(WURFL_Xml_Interface::ACTUAL_DEVICE_ROOT);
                         $currentCapabilityNameValue = array();
                         if ($reader->isEmptyElement) {
                             $device = new WURFL_Xml_ModelDevice($deviceID, $userAgent, $fallBack, $actualDeviceRoot);
                             $devicesMap[$deviceID] = $device;
                         }
                         break;
                     case WURFL_Xml_Interface::GROUP:
                         $groupID = $reader->getAttribute(WURFL_Xml_Interface::GROUP_ID);
                         $groupIDCapabilitiesMap[$groupID] = array();
                         break;
                     case WURFL_Xml_Interface::CAPABILITY:
                         $capabilityName = $reader->getAttribute(WURFL_Xml_Interface::CAPABILITY_NAME);
                         $capabilityValue = $reader->getAttribute(WURFL_Xml_Interface::CAPABILITY_VALUE);
                         $currentCapabilityNameValue[$capabilityName] = $capabilityValue;
                         $groupIDCapabilitiesMap[$groupID][$capabilityName] = $capabilityValue;
                         break;
                 }
                 break;
             case XMLReader::END_ELEMENT:
                 if ($nodeName == WURFL_Xml_Interface::DEVICE) {
                     $device = new WURFL_Xml_ModelDevice($deviceID, $userAgent, $fallBack, $actualDeviceRoot, $groupIDCapabilitiesMap);
                     $devicesMap[$device->id] = $device;
                 }
                 break;
         }
     }
     // end of while
     $reader->close();
     return $devicesMap;
 }
Beispiel #2
0
 protected function _getReader($data, $request)
 {
     if (!is_bool($request)) {
     }
     /// @TODO
     $this->_currentNode = NULL;
     $reader = new XMLReader();
     $reader->xml($data, NULL, LIBXML_NONET | LIBXML_NOENT);
     if ($this->_validate) {
         if ('@data_dir@' != '@' . 'data_dir' . '@') {
             $schema = '@data_dir@' . DIRECTORY_SEPARATOR . 'pear.erebot.net' . DIRECTORY_SEPARATOR . 'XRL';
         } else {
             $schema = dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'data';
         }
         $schema .= DIRECTORY_SEPARATOR;
         $schema .= $request ? 'request.rng' : 'response.rng';
         $reader->setRelaxNGSchema($schema);
     }
     return $reader;
 }
<?php

$file = '/etc/passwd' . chr(0) . 'asdf';
$reader = new XMLReader();
var_dump($reader->open($file));
var_dump($reader->setRelaxNGSchema($file));
Beispiel #4
0
    while ($reader->read()) {
    }
}
if ($reader->isValid()) {
    print "file relaxNG: ok\n";
} else {
    print "file relaxNG: failed\n";
}
$reader->close();
unlink($file);
$reader = new XMLReader();
$reader->XML($xmlstring);
if ($reader->setRelaxNGSchema($relaxngfile)) {
    while ($reader->read()) {
    }
}
if ($reader->isValid()) {
    print "string relaxNG: ok\n";
} else {
    print "string relaxNG: failed\n";
}
$reader->close();
$reader = new XMLReader();
$reader->XML($xmlstring);
if ($reader->setRelaxNGSchema('')) {
    echo 'failed';
}
$reader->close();
?>
===DONE===
Beispiel #5
0
<?php

$indent = 5;
/* Number of spaces to indent per level */
$reader = new XMLReader();
$reader->open('relaxNG.xml');
/*
Example setting relaxNG using string:
$reader->setRelaxNGSchemaSource(file_get_contents('relaxNG.rng'));
*/
if ($reader->setRelaxNGSchema('relaxNG.rng')) {
    while ($reader->read()) {
        /* Print node name indenting it based on depth and $indent var */
        print str_repeat(" ", $reader->depth * $indent) . $reader->name . "\n";
    }
}
print "\n";
if (!$reader->isValid()) {
    print "Document is not valid\n";
} else {
    print "Document is valid\n";
}
Beispiel #6
0
 /**
  * Returns an XML reader for some data.
  *
  * \param string $URI
  *      URI to the XML data to process.
  *
  * \param bool $request
  *      Whether the data refers to an XML-RPC
  *      request (\c true) or a response (\c false).
  *
  * \retval XMLReader
  *      An XML reader for the given data.
  *
  * \throw InvalidArgumentException
  *      You tried to pass something that is not
  *      a boolean as the \c $request parameter.
  *
  * \note
  *      The reader is set to validate the document
  *      on the fly if that's what this decoder was
  *      configured to do during construction.
  */
 protected function getReader($URI, $request)
 {
     if (!is_string($URI)) {
         throw new \InvalidArgumentException('Not a string');
     }
     if (!is_bool($request)) {
         throw new \InvalidArgumentException('Not a boolean');
     }
     $this->currentNode = null;
     $reader = new \XMLReader();
     $reader->open($URI, null, LIBXML_NONET | LIBXML_NOENT);
     if ($this->validate) {
         $schema = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR;
         $schema .= $request ? 'request.rng' : 'response.rng';
         $reader->setRelaxNGSchema($schema);
     }
     return $reader;
 }
 /**
  * validates the xml string
  *
  * @return boolean true if the xml string is valid
  * @access private
  */
 private function validateString($xml_feed_string)
 {
     $reader = new XMLReader();
     $reader->XML($xml_feed_string);
     if ($reader->setRelaxNGSchema(RELAX_NG_IMPORT_SCHEMA)) {
         while ($reader->read()) {
         }
     }
     if (!$reader->isValid()) {
         return false;
     }
     $reader->close();
     return true;
 }
Beispiel #8
0
 public function setRelaxNGSchema($filename)
 {
     return parent::setRelaxNGSchema($filename);
 }