Esempio n. 1
0
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);
    }
}