<?php
/**
    XsltProc in PHP
    l.m.orchard@pobox.com
    Share and Enjoy
*/

function main() {
    global $xml_url, $xsl_url;
    $xml_url = isset($_GET['xml']) ? $_GET['xml'] : '';
    $xsl_url = isset($_GET['xsl']) ? $_GET['xsl'] : '';

    if (!isset($_GET['edit']) && $xml_url != '' && $xsl_url != '') {
        transform();
    } else {
        presentForm();
    }
}

function transform() {
    global $xml_url, $xsl_url;

    header('Content-type: text/xml', true);

    $xml = file_get_contents($xml_url);
    $xsl = file_get_contents($xsl_url);
    
    $xslt = new xsltProcessor;
    $xslt->importStyleSheet(DomDocument::loadXML($xsl));
    foreach ($_GET as $param => $value) {
        $xslt->setParameter('', $param, $value);
    }
    $xslt_result = $xslt->transformToXML(DomDocument::loadXML($xml));

    $result = $xslt_result;

    echo $result;
}

function presentForm() {
    global $xml_url, $xsl_url;
    ?>
        <html>
            <head>
                <title>XsltProc in PHP</title>
                <style type="text/css">
                    body { font: 12px arial }
                    label { display: block; float: left; width: 10ex; text-align: right; margin-right: 1ex; }
                    input[type='submit'] { margin-left: 11ex; }
                </style>
            </head>
            <body>
                <h1>XsltProc in PHP</h1>
                <form method="GET">
                    <fieldset>
                        <legend>Input parameters</legend>
                        <label for="xml">XML URL</label>
                        <input type="text" size="50" name="xml" id="xml" value="<?php echo $xml_url ?>" />
                        <br />
                        <label for="xsl">XSL URL</label>
                        <input type="text" size="50" name="xsl" id="xsl" value="<?php echo $xsl_url ?>" />
                        <br />
                        <input type="submit" />
                    </fieldset>
                </form>
            </body>
        </html>
    <?php
}

main();

?>
