function Transform($n) { $xml = new DOMDocument(); $xml->loadXML("<dummy/>"); $xpath = new DOMXPath($n->ownerDocument); $xpath->registerNameSpace("txs", "http://www.agencexml.com/txs"); $xpath->registerNameSpace("xsl", "http://www.w3.org/1999/XSL/Transform"); if ($xpath->query("txs:input", $n)->length == 0) { $xml->documentElement->parentNode->replaceChild($xml->importNode($n->firstChild, true), $xml->documentElement); } else { $root = $xml->importNode($xpath->query("txs:input/*", $n)->item(0), true); $xml->documentElement->parentNode->replaceChild($root, $xml->documentElement); $rootNodes = $xpath->query("txs:input/node()", $n); for ($i = 0; $i < $rootNodes->length; $i++) { $cur = $rootNodes->item($i); if ($cur->nodeType == XML_PI_NODE) { $root->parentNode->insertBefore($root->ownerDocument->importNode($cur, true), $root); } } } $xsl = new DOMDocument(); $stsh = $n->getAttribute("stylesheet"); if ($stsh != "") { if (substr($stsh, 0, 1) == "#") { $stns = $xpath->query("//xsl:stylesheet[@txs:name='" . substr($stsh, 1) . "']"); $xsl->loadXML("<dummy/>"); $xsl->documentElement->parentNode->replaceChild($xsl->importNode($stns->item(0), true), $xsl->documentElement); } else { $xsl->load($stsh); } } else { $xsl->loadXML("<dummy/>"); $xsl->documentElement->parentNode->replaceChild($xsl->importNode($xpath->query("txs:stylesheet/*", $n)->item(0), true), $xsl->documentElement); } $xslp = new xsltProcessor(); $xslp->importStyleSheet($xsl); $prms = $xpath->query("txs:with-param", $n); foreach ($prms as $prm) { $xslp->setParameter("", $prm->getAttribute("name"), $prm->getAttribute("value")); } $result = $xslp->transformToXml($xml); if (substr($result, 0, 1) == "<") { $xRes = new DOMDocument(); $xRes->loadXML($result); $n->parentNode->replaceChild($n->ownerDocument->importNode($xRes->documentElement, true), $n); } else { $n->parentNode->replaceChild($n->ownerDocument->createCDATASection($result), $n); } }
protected function transform_xsl($url, $xsl_filename, $isstring = 0) { if (strrchr($url, 'http://') || $this->text != '') { if (strrchr($url, '#')) { $fragment = array_pop(explode('#', $url)); } if ($this->text != '') { $this->use_store = 0; $title = 'Using direct Input'; $url = $this->path . 'direct/'; $html = method_exists('tidy', 'cleanRepair') ? $this->tidy_html(urldecode($this->text), '', 'php') : urldecode($this->text); } else { $html = $this->get_file_contents($url); } if (strlen(trim($html)) === 0) { return $this->error('noURL'); } $dom = new DOMDocument('1.0'); $dom->preserveWhiteSpace = false; if ($this->text != '') { @$dom->loadXML($html); } else { @$dom->loadXML($this->tidy_html($html, $url, $this->tidy_option)); } $dom->formatOutput = true; $dom->normalizeDocument(); $title = !isset($title) ? $dom->getElementsByTagName('title')->item(0)->nodeValue : $title; if ($this->type == 'rdfa' && !$dom->getElementsByTagName('html')->item(0)->getAttribute('xmlns')) { $dom->getElementsByTagName('html')->item(0)->setAttribute('xmlns', 'http://www.w3.org/1999/xhtml'); } if (isset($fragment)) { $dom->relaxNGValidateSource($this->valid_schema()); $element = $dom->getElementById($fragment); $content = $dom->saveXML($element); $dom = $this->return_html_frag($content, $title); } if (!method_exists('xsltProcessor', 'transformToXML')) { die("Sorry PHP xslt functions unavailable"); } $xslt = new xsltProcessor(); $xslt->setParameter('', 'transformr', $this->path); $xslt->setParameter('', 'url', $url); $xslt->setParameter('', 'request-uri', $_SERVER['REQUEST_URI']); $xslt->setParameter('', 'base-uri', $url); $xslt->setParameter('', 'doc-title', $title); $xslt->setParameter('', 'version', $this->version); if ($this->use_store == 1) { $xslt->setParameter('', 'endpoint-link', $this->path . 'sparql/endpoint?'); } $xslt->importStyleSheet(DomDocument::load($xsl_filename)); if (!@DomDocument::loadXML($dom->saveXML())) { $dom = @DomDocument::loadXML($this->tidy_html($html, $url, $this->tidy_option, 'output-xml')); // reload as plain vanilla xml if (!$dom) { return $this->error('invalidDoc'); } } return $xslt->transformToXML(@DomDocument::loadXML($dom->saveXML())); } elseif ($url == 'referer' && getenv("HTTP_REFERER") != '') { $referer = getenv("HTTP_REFERER"); return $this->transform_xsl($referer, $xsl_filename); } elseif (getenv("HTTP_REFERER") != '' && $url != '') { $referer = getenv("HTTP_REFERER"); return $this->transform_xsl($referer . '#' . $url, $xsl_filename); } else { return $this->error('noURL'); } }
protected function addRequestParams(xsltProcessor $v801f7201346b43f8ee8390a1ef20ddcd, $vf1f713c9e000f5d3f280adbd124df4f5, $v851f5ac9941d720844d143ed9cfcf60a = "") { foreach ($vf1f713c9e000f5d3f280adbd124df4f5 as $v3c6e0b8a9c15224a8228b9a98ca1531d => $v3a6d0284e743dc4a9b86f97d6dd1a3bf) { $v3c6e0b8a9c15224a8228b9a98ca1531d = strtolower($v3c6e0b8a9c15224a8228b9a98ca1531d); if (!is_array($v3a6d0284e743dc4a9b86f97d6dd1a3bf)) { if (strpos($v3a6d0284e743dc4a9b86f97d6dd1a3bf, "'") !== false && strpos($v3a6d0284e743dc4a9b86f97d6dd1a3bf, "\"") !== false) { $v3a6d0284e743dc4a9b86f97d6dd1a3bf = str_replace("'", "\\\"", $v3a6d0284e743dc4a9b86f97d6dd1a3bf); } $v3c6e0b8a9c15224a8228b9a98ca1531d = str_replace(array(':'), array(''), $v3c6e0b8a9c15224a8228b9a98ca1531d); $v801f7201346b43f8ee8390a1ef20ddcd->setParameter("", $v851f5ac9941d720844d143ed9cfcf60a . $v3c6e0b8a9c15224a8228b9a98ca1531d, $v3a6d0284e743dc4a9b86f97d6dd1a3bf); } else { $this->addRequestParams($v801f7201346b43f8ee8390a1ef20ddcd, $v3a6d0284e743dc4a9b86f97d6dd1a3bf, $v851f5ac9941d720844d143ed9cfcf60a . $v3c6e0b8a9c15224a8228b9a98ca1531d . "."); } } }
function xslfilter($buffer) { global $__xslfilter_debug; global $__xslfilter_phpfunc; global $__xslfilter_prehook; global $__xslfilter_posthook; global $__xslfilter_start_utime; global $__xslfilter_i18n; if (empty($buffer)) { return false; } if ($__xslfilter_debug) { return false; } libxml_use_internal_errors(true); if (!array_key_exists('WEB_LAYOUT', $_SERVER) && !array_key_exists('XSL_DIR', $_SERVER) && !array_key_exists('XSL_STYLESHEET', $_SERVER)) { return __xslfilter_do_error("Missing stylesheet information", "None of the environment variables <code>WEB_LAYOUT</code>, " . "<code>XSL_DIR</code> or <code>XSL_STYLESHEET</code> " . "have been defined"); } libxml_clear_errors(); // Load document $doc = new DOMDocument(); if (!$doc->loadXML($buffer, LIBXML_NONET)) { return __xslfilter_do_error("Error in current document", __xslfilter_build_xmlerrors(libxml_get_errors())); } // Processing instruction if ($r = __xslfilter_process_pi($doc)) { return $r; } // XSLT Processor $xslt = new xsltProcessor(); // Basic information $xslt->setParameter('', 'lastmod', gmstrftime("%Y%m%d%H%M%SZ", getlastmod())); $xslt->setParameter('', 'now', gmstrftime("%Y%m%d%H%M%SZ", time())); // Information about http request $xslt->setParameter('', 'http-referer', array_key_exists('HTTP_REFERER', $_SERVER) ? $_SERVER['HTTP_REFERER'] : null); $xslt->setParameter('', 'request-uri', array_key_exists('REQUEST_URI', $_SERVER) ? $_SERVER['REQUEST_URI'] : null); $xslt->setParameter('', 'base-uri', array_key_exists('SCRIPT_FILENAME', $_SERVER) ? dirname($_SERVER['SCRIPT_FILENAME']) : null); $xslt->setParameter('', 'server-name', array_key_exists('SERVER_NAME', $_SERVER) ? $_SERVER['SERVER_NAME'] : null); $xslt->setParameter('', 'secure', array_key_exists('HTTPS', $_SERVER) ? 'true' : null); $xslt->setParameter('', 'protocol', array_key_exists('HTTPS', $_SERVER) ? 'https' : 'http'); if (($script_uri = parse_url($_SERVER['SCRIPT_URI'])) !== false) { $xslt->setParameter('', 'uri-scheme', @$script_uri['scheme']); $xslt->setParameter('', 'uri-host', @$script_uri['host']); $xslt->setParameter('', 'uri-port', @$script_uri['port']); $xslt->setParameter('', 'uri-path', @$script_uri['path']); $xslt->setParameter('', 'uri-query', @$script_uri['query']); $xslt->setParameter('', 'uri-fragment', @$script_uri['fragment']); } else { $xslt->setParameter('', 'uri-scheme', null); $xslt->setParameter('', 'uri-host', null); $xslt->setParameter('', 'uri-port', null); $xslt->setParameter('', 'uri-path', null); $xslt->setParameter('', 'uri-query', null); $xslt->setParameter('', 'uri-fragment', null); } // Parameters set from apache server $xslt->setParameter('', 'pagedesc-default-xml', array_key_exists('WEB_LAYOUT', $_SERVER) ? $_SERVER['WEB_LAYOUT'] . '/defaults.xml' : null); $xslt->setParameter('', 'expect-lang', array_key_exists('expect-lang', $_SERVER) ? $_SERVER['expect-lang'] : null); $xslt->setParameter('', 'handheld-client', array_key_exists('handheld-client', $_SERVER) ? $_SERVER['handheld-client'] : null); // Pre hook if (!is_null($__xslfilter_prehook) && ($r = $__xslfilter_prehook($doc, $xslt)) !== true) { return $r; } // PHP function enabling if ($__xslfilter_phpfunc) { $xslt->registerPHPFunctions(is_array($__xslfilter_phpfunc) ? $__xslfilter_phpfunc : null); } // Lang to import localization templates $lang = ''; if ($__xslfilter_i18n === null || $__xslfilter_i18n) { $lang = $doc->documentElement->getAttribute('lang'); } if (empty($lang) && !is_null($__xslfilter_i18n) && is_string($__xslfilter_i18n)) { $lang = $__xslfilter_i18n; } // Listing stylesheet $stylesheet = array(); if (array_key_exists('WEB_LAYOUT', $_SERVER) || array_key_exists('XSL_DIR', $_SERVER)) { $xsl_dir = array_key_exists('XSL_DIR', $_SERVER) ? $_SERVER['XSL_DIR'] : $_SERVER['WEB_LAYOUT']; $style = __xslfilter_get_stylesheet($doc, 'text/xsl'); foreach ($style as $s) { if (!($href = $s['href'])) { continue; } if ($href[0] == '/' || preg_match('|^\\w+://|', $href)) { return __xslfilter_do_error("Error in current document", "Only local and relative stylesheet are allowed"); } $stylesheet[] = $xsl_dir . '/' . $href; } if (empty($stylesheet) && array_key_exists('XSL_STYLESHEET', $_SERVER)) { $href = $_SERVER['XSL_STYLESHEET']; if ($href[0] != '/') { array_push($stylesheet, $xsl_dir . '/' . $href); } } if (!empty($lang)) { $href = 'l10n/' . $lang . '.xsl'; if (file_exists($file = $xsl_dir . '/' . $href)) { $stylesheet[] = $file; } } } else { if (array_key_exists('XSL_STYLESHEET', $_SERVER)) { array_push($stylesheet, $_SERVER['XSL_STYLESHEET']); if (!empty($lang)) { $file = dirname($_SERVER['XSL_STYLESHEET']) . '/' . 'l10n/' . $lang . '.xsl'; if (file_exists($file)) { $stylesheet[] = $file; } } } else { return __xslfilter_do_error("No usable stylesheet", "Missing stylesheet at server and document level"); } } // Importing stylesheet if (count($stylesheet) <= 1) { // Correct code for importing stylesheet // Unfortunately PHP only take into account the last import foreach ($stylesheet as $file) { libxml_clear_errors(); $xsl = new DomDocument(); $xsl->substituteEntities = true; // LIBXML_NOENT if (!$xsl->load($file, LIBXML_NONET)) { return __xslfilter_do_error("Error in stylesheet: {$href}", __xslfilter_build_xmlerrors(libxml_get_errors())); } $xslt->importStyleSheet($xsl); } } else { // Fix code to import several stysheets // By faking a top level stylesheet with import statements libxml_clear_errors(); $xsl = new DomDocument('1.0'); $xsl->substituteEntities = true; // LIBXML_NOENT $root = $xsl->createElementNS('http://www.w3.org/1999/XSL/Transform', 'xsl:stylesheet'); $v = $xsl->createAttribute('version'); $v->value = "1.0"; $root->appendChild($v); $xsl->appendChild($root); foreach ($stylesheet as $file) { $s = $xsl->createElementNS('http://www.w3.org/1999/XSL/Transform', 'xsl:import'); $h = $xsl->createAttribute('href'); $h->value = $file; $s->appendChild($h); $root->appendChild($s); } $xslt->importStyleSheet($xsl); } // Applying transformation $r = $xslt->transformToXML($doc); if ($errors = libxml_get_errors()) { return __xslfilter_do_error("Error while rendering document", __xslfilter_build_xmlerrors($errors)); } // Something wrong, but we have no clue if ($r == false) { return __xslfilter_do_error("Error while rendering document", "Check document and associated stylesheets"); } // Job's done return $r; }
private function processTransformation() { $v3d788fa62d7c185a1bee4c9147ee1091 = new DOMXpath($this->dom); $vca15fd43dfaeb80eb8c125735e0479b0 = $v3d788fa62d7c185a1bee4c9147ee1091->query("/sitemap/match[@pattern = '{$this->pattern}']/transform"); foreach ($vca15fd43dfaeb80eb8c125735e0479b0 as $v36c4536996ca5615dcf9911f068786dc) { $v25d902c24283ab8cfbac54dfa101ad31 = $this->replaceParams($v36c4536996ca5615dcf9911f068786dc->getAttribute("src")); if (file_exists($v25d902c24283ab8cfbac54dfa101ad31)) { $vc3aaa7dd2c4cf0305f95e82438b46e82 = new DOMDocument('1.0', 'utf-8'); $vc3aaa7dd2c4cf0305f95e82438b46e82->load($v25d902c24283ab8cfbac54dfa101ad31); $v801f7201346b43f8ee8390a1ef20ddcd = new xsltProcessor(); $v801f7201346b43f8ee8390a1ef20ddcd->registerPHPFunctions(); $v801f7201346b43f8ee8390a1ef20ddcd->importStyleSheet($vc3aaa7dd2c4cf0305f95e82438b46e82); $v21ffce5b8a6cc8cc6a41448dd69623c9 = $this->extractParams($v36c4536996ca5615dcf9911f068786dc); foreach ($v21ffce5b8a6cc8cc6a41448dd69623c9 as $vb068931cc450442b63f5b3d276ea4297 => $v2063c1608d6e0baf80249c42e2be5804) { $v2063c1608d6e0baf80249c42e2be5804 = $this->replaceParams($v2063c1608d6e0baf80249c42e2be5804); $v801f7201346b43f8ee8390a1ef20ddcd->setParameter("", $vb068931cc450442b63f5b3d276ea4297, $v2063c1608d6e0baf80249c42e2be5804); } $this->buffer = $v801f7201346b43f8ee8390a1ef20ddcd->transformToXML($this->loadBufferDom()); } else { throw new coreException("Transformation failed. File {$v25d902c24283ab8cfbac54dfa101ad31} doesn't exists."); } } }