from xml.dom import Node from Ft.Xml import XML_NAMESPACE, EMPTY_NAMESPACE from Ft.Xml.Lib.XmlString import IsXmlSpace def StripElements(node,stripElements,stripState=0): if node.nodeType == Node.DOCUMENT_NODE: for c in node.childNodes: StripElements(c,stripElements,stripState) elif node.nodeType == Node.ELEMENT_NODE: #See if we need to change the strip state if node.getAttributeNS(XML_NAMESPACE, 'space') == 'preserve': #Force the state to preserve stripState = 0 elif node.getAttributeNS(XML_NAMESPACE, 'space'): #Force to strip stripState = 1 else: #See if it is a perserve or strip element for (uri, local, strip) in stripElements: if (uri, local) in [ (node.namespaceURI, node.localName), (EMPTY_NAMESPACE, '*'), (node.namespaceURI, '*') ]: stripState = strip break for c in node.childNodes: StripElements(c,stripElements,stripState) elif node.nodeType == Node.TEXT_NODE: if stripState and IsXmlSpace(node.data): #Kill'em all node.parentNode.removeChild(node)