1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
########################################################################
#
# File Name: WithParamElement.py
#
#
"""
Implementation of the XSLT Spec with-param stylesheet element.
WWW: http://4suite.com/4XSLT e-mail: support@4suite.com
Copyright (c) 1999-2000 Fourthought Inc, USA. All Rights Reserved.
See http://4suite.com/COPYRIGHT for license and copyright information
"""
import xml.dom.ext
import xml.dom.Element
import xml.xslt
from xml.xslt import XsltElement, XsltException, Error
from xml.xpath import CoreFunctions
from xml.xpath import Util
from xml.xpath import XPathParser
from xml.dom import EMPTY_NAMESPACE
class WithParamElement(XsltElement):
legalAttrs = ('select', 'name')
def __init__(self, doc, uri=xml.xslt.XSL_NAMESPACE, localName='with-param', prefix='xsl', baseUri=''):
XsltElement.__init__(self, doc, uri, localName, prefix, baseUri)
def setup(self):
self.__dict__['_nss'] = xml.dom.ext.GetAllNs(self)
name_attr = self.getAttributeNS(EMPTY_NAMESPACE, 'name')
split_name = Util.ExpandQName(
name_attr,
namespaces=self._nss
)
self.__dict__['_name'] = split_name
select = self.getAttributeNS(EMPTY_NAMESPACE, 'select')
if select:
parser = XPathParser.XPathParser()
self.__dict__['_expr'] = parser.parseExpression(select)
else:
self.__dict__['_expr'] = None
return
def instantiate(self, context, processor):
#original = context.processorNss
original = context.copy()
#origNss = context.processorNss
context.processorNss = self._nss
if self._expr:
result = self._expr.evaluate(context)
else:
processor.pushResult()
for child in self.childNodes:
context = child.instantiate(context, processor)[0]
result = processor.popResult()
context.rtfs.append(result)
#context.processorNss = origNss
context.set(original)
return (context, (self._name, result))
def __getinitargs__(self):
return (None, self.namespaceURI, self.localName, self.prefix, self.baseUri)
def __getstate__(self):
base_state = XsltElement.__getstate__(self)
new_state = (base_state, self._nss, self._name, self._expr)
return new_state
def __setstate__(self, state):
XsltElement.__setstate__(self, state[0])
self._nss = state[1]
self._name = state[2]
self._expr = state[3]
return
|