getOptimizationPasses() as $regexp => $methodName) { $regexp = str_replace(' ', '\\s*', $regexp); $expr = preg_replace_callback($regexp, [$this, $methodName], $expr); } return ($expr === $original) ? $expr : $this->evaluateExpression(trim($expr)); } /** * Replace constant expressions in given AVT * * @param DOMAttr $attribute * @return void */ protected function normalizeAttribute(DOMAttr $attribute) { AVTHelper::replace( $attribute, function ($token) { if ($token[0] === 'expression') { $token[1] = $this->evaluateExpression($token[1]); } return $token; } ); } /** * Replace constant expressions in given XSL element * * @param DOMElement $element * @return void */ protected function normalizeElement(DOMElement $element) { $attrName = ($element->localName === 'value-of') ? 'select' : 'test'; $oldExpr = $element->getAttribute($attrName); $newExpr = $this->evaluateExpression($oldExpr); if ($newExpr !== $oldExpr) { $element->setAttribute($attrName, $newExpr); } } }