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); } }