当前位置: 首页>>代码示例>>PHP>>正文


PHP XSLTProcessor::setProfiling方法代码示例

本文整理汇总了PHP中XSLTProcessor::setProfiling方法的典型用法代码示例。如果您正苦于以下问题:PHP XSLTProcessor::setProfiling方法的具体用法?PHP XSLTProcessor::setProfiling怎么用?PHP XSLTProcessor::setProfiling使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在XSLTProcessor的用法示例。


在下文中一共展示了XSLTProcessor::setProfiling方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: render

 /**
  * Converts the given XML tree and the given XSL file to a (HTML) file, with respect to the given XSL parameters.
  * The given XMLTree parameter may be of the SimpleXMLElement or the DOMDocument type, however, the latter is the fastest.
  * The generated output may be considered to be formatted properly.
  * @param mixed The XML Tree as a SimpleXMLElement or a DOMDocument
  * @param mixed The fullpath to the XSL file, or an instanced \SimpleXMLElement XSL tree
  * @param \System\Collection\Map The map with the parameters, or null for no parameters or default
  */
 public final function render()
 {
     $args = func_get_args();
     if (count($args) != 3) {
         throw new \InvalidArgumentException('Invalid amount of arguments given.');
     }
     list($xmlTree, $xslFile, $parameters) = $args;
     $processor = new \XSLTProcessor();
     //register the php functions
     if (count(self::$registeredPHPFunctions) > 0) {
         $processor->registerPHPFunctions(self::$registeredPHPFunctions);
     }
     //load the xsl file intro a dom
     $xsl = new \DOMDocument();
     if ($xslFile instanceof \SimpleXMLElement) {
         $xsl->loadXML($xslFile->asXML());
     } else {
         if (!file_exists($xslFile)) {
             throw new \System\Error\Exception\FileNotFoundException('XSL File: ' . $xslFile . ' cannot be found');
         }
         $xsl->load($xslFile);
     }
     //attach the xsl dom to the processor
     $processor->importStylesheet($xsl);
     //when we run as a local debug system, we output the profiling information
     if (defined('DEBUG')) {
         $processor->setProfiling(PATH_LOGS . 'XSLTRenderProfiling.txt');
     }
     $dom = new \DOMDocument();
     switch (true) {
         case $xmlTree instanceof \SimpleXMLElement:
             //we need to convert to a domdocument
             $dom = \System\XML\XML::convertSimpleXMLElementToDOMDocument($xmlTree);
             break;
         case $xmlTree instanceof \DOMDocument:
             //no conversion needed
             break;
         default:
             throw new \InvalidArgumentException('Given XML tree is of non supported tree type: ' . get_class($xmlTree));
     }
     $this->preprocessParameters($parameters);
     //we do not need any namespaces
     $processor->setParameter('', $parameters->getArrayCopy());
     $output = $processor->transformToXML($dom);
     if (!$output) {
         throw new \Exception('Could not transform the given XML and XSL to a valid HTML page');
     }
     if (MINIFY_ENABLE) {
         $output = \System\Web\Minify\HTML\Minify::minify($output);
     }
     $this->addToBuffer($output);
 }
开发者ID:Superbeest,项目名称:Core,代码行数:60,代码来源:XSLTRenderer.class.php

示例2: render

 /**
  * The main function of this object which simply renders the accumulated data using PHP's XSLTProcessor
  * @access public
  */
 public function render()
 {
     try {
         $xsltproc = new \XSLTProcessor();
         $xsltproc->importStylesheet($this->_styleSheet);
         if (isset($this->_profilerLogPath)) {
             $xsltproc->setProfiling($this->_profilerLogPath);
         }
         return $xsltproc->transformToXML($this->_inputData);
     } catch (Exception $e) {
         echo "Could not process the Datafile with the given Stylesheet: " . $e->getMessage();
     }
 }
开发者ID:nforgerit,项目名称:TYPO3-Transition-Tool,代码行数:17,代码来源:PhpXsltProcessor.php

示例3: chr

<?php

$file = '/etc/passwd' . chr(0) . 'asdf';
$doc = new DOMDocument();
$proc = new XSLTProcessor();
var_dump($proc->setProfiling($file));
var_dump($proc->transformToURI($doc, $file));
开发者ID:RavuAlHemio,项目名称:hhvm,代码行数:7,代码来源:ext_xsl_null_byte.php

示例4: CLIConfiguration

require 'library/class.cli-configuration.php';
require 'library/functions.sanity-checks.php';
$Configuration = new CLIConfiguration(array('help::' => null, 'u=url:' => '', 'v=verbose' => 0, 'version' => null, 't=xsl:' => '', 'x=param:' => array(), 'p=preset:' => null));
$Configuration->SetFlagTriggers(array('help' => 'CLIVersion', 'verbose' => 'CLIVerbosity', 'param' => 'XSLParam'));
$Configuration->AddPresetFlagTrigger();
$Collected = $Configuration->CollectArguments();
$Parameters = $Configuration->Param;
$Url = $Configuration->Url;
$Xsl = $Configuration->Xsl;
// Sanity Checks
SanityCheck(!empty($Url), 'No URL specified', 'CLIVersion');
SanityCheck(!empty($Xsl), 'No Transformation XSL file specified');
SanityCheck(file_exists($Xsl), '"' . $Xsl . '" does not exist');
libxml_use_internal_errors(true);
$XsltProcessor = new XSLTProcessor();
$XsltProcessor->setProfiling('_output/profiling.txt');
$XmlString = '';
$XmlData = new DOMDocument('1.0', 'utf-8');
$XslData = new DOMDocument('1.0', 'utf-8');
$DomErrors = new DOMDocument('1.0', 'utf-8');
$XsltProcessor->setParameter('', 'request-url', $Url);
if (is_array($Parameters)) {
    foreach ($Parameters as $Key => $Value) {
        $XsltProcessor->setParameter('', $Key, $Value);
    }
}
// Grab the remote XML file
$C = curl_init($Url);
curl_setopt_array($C, array(CURLOPT_USERAGENT => 'XSL-Transformation/' . VERSION . ' (like Feedburner)', CURLOPT_FOLLOWLOCATION => true, CURLOPT_MAXREDIRS => 3, CURLOPT_HEADER => false, CURLOPT_RETURNTRANSFER => true));
$XmlString = curl_exec($C);
curl_close($C);
开发者ID:sirlancelot,项目名称:php-tools,代码行数:31,代码来源:transformXML.php

示例5: tryHTML

 /**
  * проверяет возможности клиента и выдает как есть или выполняет трансформации сам
  * и выдает готовый html
  * @param string $data выходные данные в xml
  * @param boolean $html явное указание формата html
  * @param string $documentURI так как xml-документ $data передан строкой иногда требуется указать путь до него чтобы нашлись схемы
  * @param boolean $forceValidation NULL - валидация если в домашнем каталоге, TRUE: форсировать проверку по схеме/tidy всегда, FALSE - не проверять по схеме/tidy
  * @param string $htmlContentType миме-тип для вывода html, по-умолчанию text/html, для вывода html+xul передать application/xml
  */
 public static function tryHTML($data, $html = FALSE, $documentURI = NULL, $forceValidation = NULL, $htmlContentType = "text/html")
 {
     $outputDom = NULL;
     $xsltResult = NULL;
     $debug = FALSE;
     $xsltProfiler = NULL;
     if (self::$done == TRUE) {
         trigger_error("Output::tryHTML() called twice?");
     }
     $xsltStart = $xsltStop = 0;
     //минипрофайлер
     if ($html == FALSE && isset($_SERVER["HTTP_ACCEPT"])) {
         //тут пока неразбериха с text/xml по старому и application/xml по новому
         //опера по-новому, ие по-старому, мозиллы и так и сяк
         if (strpos($_SERVER["HTTP_ACCEPT"], "/xml") !== FALSE) {
             //тем кто явно грит "понимаю xml" сбросим флаг html
             $html = FALSE;
             if ("application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5" == $_SERVER["HTTP_ACCEPT"]) {
                 //но некоторые говорят что понимают, но на самом деле не понимают, это андроиды 2.х их мы отлавливаем по кривому заголовку
                 //под раздачу также попадают ближайщие родственники, которые реально умеют, но их не отличить от больных - сафари 4 (айфон 4).
                 //остальные родственники успешно вылечились - сафари 5, хромы и хромиумы и другие вэбкитообразные.
                 //используем заголовок Accept а не Usera-gent потому что
                 //1. уже есть Vary: Accept - чтоб не плодить ветвление в прокси и кешах
                 //2. у больных особей есть переключатель "mobile view" который влияет на User-agent-а
                 // @seealso http://www.gethifi.com/blog/browser-rest-http-accept-headers
                 // @seealso https://developer.mozilla.org/en-US/docs/HTTP/Content_negotiation
                 $html = TRUE;
             }
         } elseif (strpos($_SERVER["HTTP_ACCEPT"], "text/html") !== FALSE) {
             //тем кто не понимает xml но явно грит что умеет html
             $html = TRUE;
         }
     } elseif (isset($_SERVER["HTTP_ACCEPT"])) {
         //"обратная автоматика" - даже если форсирован HTML но клиент его "не хочет" или "не может", но обещает что поймет XML - спрыгиваем на XML
         if (strpos($_SERVER["HTTP_ACCEPT"], "text/html") === FALSE && strpos($_SERVER["HTTP_ACCEPT"], "/xml") !== FALSE) {
             //тем кто явно заявляет что понимает xml и не умеет html
             $html = FALSE;
         }
     }
     //$html=TRUE;
     //подготовить стили для трансформации на php
     if ($debug || $html) {
         $outputDom = new \DOMDocument();
         $outputDom->loadXML($data);
         if ($documentURI) {
             $outputDom->documentURI = $documentURI;
         }
         //валидация данных xml-схемой
         if ($debug) {
             $matches = NULL;
             //добываем имя схемы и проверяем по ней (или xmlreader?)
             if (preg_match("/schemaLocation=\".+\\s([a-zA-Z0-9_\\/\\.\\-]+)\"/", $data, $matches)) {
                 $outputDom->schemaValidate(($documentURI ? dirname($documentURI) . "/" : "") . $matches[1]);
                 //                } else {
                 //                    throw new \Exception("cant find schemaLocation");
             }
         }
         $matches = NULL;
         //добываем имя стиля из хмл-а (или xmlreader?)
         if ($outputDom->firstChild->nodeType == XML_PI_NODE && $outputDom->firstChild->target == "xml-stylesheet") {
             if (preg_match("/href\\s*=\\s*\"(.+)\"/", $outputDom->firstChild->data, $matches)) {
                 $oldHeaders = headers_list();
                 //время трансформации считаем общее - вместе с загрузкой документов
                 $xsltStart = microtime(TRUE);
                 $xsl = new \DomDocument();
                 // надо взять таблицу стилей локально
                 $xsl_file = dirname($_SERVER["SCRIPT_FILENAME"]) . "/" . str_replace("http://" . $_SERVER["HTTP_HOST"] . dirname($_SERVER["PHP_SELF"]), "", $matches[1]);
                 //error_log(dirname($_SERVER["SCRIPT_FILENAME"]));
                 //error_log($_SERVER["PHP_SELF"]);
                 //$xsl->load($matches[1]);
                 $xsl->load("{$xsl_file}");
                 $proc = new \XSLTProcessor();
                 if ($xsltProfiler) {
                     $proc->setProfiling($xsltProfiler);
                 }
                 $proc->importStyleSheet($xsl);
                 //регистрируем на себя обращения к файлам
                 stream_wrapper_unregister("file") or die(__FILE__ . __LINE__);
                 stream_wrapper_register("file", static::CLASSNAME) or die(__FILE__ . __LINE__);
                 //вешаем на обработчик выхода ловушку - если вложенный скрипт попытается сделать exit или die
                 register_shutdown_function(array(static::CLASSNAME, "checkDone"));
                 //на время трансформации ставим свой специальный обработчик ошибок
                 set_error_handler(array(static::CLASSNAME, "xsltErrorHandler"));
                 $xsltResult = $proc->transformToXML($outputDom);
                 restore_error_handler();
                 if (self::$xsltErrors != NULL) {
                     //а сообщаем об ошибках как обычно
                     trigger_error("XSLTProcessor::transformToXml(): " . self::$xsltErrors);
                 }
                 //ставим маркер что управление нам вернули
                 self::$done = TRUE;
//.........这里部分代码省略.........
开发者ID:servandserv,项目名称:happymeal,代码行数:101,代码来源:Xml2Html.php


注:本文中的XSLTProcessor::setProfiling方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。