1--TEST--
2XSLTProcessor namespace mapper lifetime
3--EXTENSIONS--
4dom
5xsl
6--FILE--
7<?php
8
9$input = DOM\XMLDocument::createFromString(<<<XML
10<root>
11    <hello>World</hello>
12</root>
13XML);
14
15$xslXML = <<<XML
16<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
17    xmlns:php="http://php.net/xsl"
18    xmlns:xsdl="http://www.w3.org/1999/XSL/Transform">
19    <xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
20    <xsl:template match="/root">
21        <xsl:value-of select="php:function('strtoupper', string(./hello))"/>
22    </xsl:template>
23</xsl:stylesheet>
24XML;
25
26$processor = new XSLTProcessor();
27// The fact that this is a temporary is important!
28// And yes, this is done twice on purpose to check for leaks
29$processor->importStylesheet(DOM\XMLDocument::createFromString($xslXML));
30$processor->importStylesheet(DOM\XMLDocument::createFromString($xslXML));
31$processor->registerPHPFunctions();
32echo $processor->transformToXML($input), "\n";
33
34?>
35--EXPECT--
36WORLD
37