1from __future__ import absolute_import, division, unicode_literals 2 3from xml.dom import Node 4 5from . import _base 6 7 8class TreeWalker(_base.NonRecursiveTreeWalker): 9 def getNodeDetails(self, node): 10 if node.nodeType == Node.DOCUMENT_TYPE_NODE: 11 return _base.DOCTYPE, node.name, node.publicId, node.systemId 12 13 elif node.nodeType in (Node.TEXT_NODE, Node.CDATA_SECTION_NODE): 14 return _base.TEXT, node.nodeValue 15 16 elif node.nodeType == Node.ELEMENT_NODE: 17 attrs = {} 18 for attr in list(node.attributes.keys()): 19 attr = node.getAttributeNode(attr) 20 if attr.namespaceURI: 21 attrs[(attr.namespaceURI, attr.localName)] = attr.value 22 else: 23 attrs[(None, attr.name)] = attr.value 24 return (_base.ELEMENT, node.namespaceURI, node.nodeName, 25 attrs, node.hasChildNodes()) 26 27 elif node.nodeType == Node.COMMENT_NODE: 28 return _base.COMMENT, node.nodeValue 29 30 elif node.nodeType in (Node.DOCUMENT_NODE, Node.DOCUMENT_FRAGMENT_NODE): 31 return (_base.DOCUMENT,) 32 33 else: 34 return _base.UNKNOWN, node.nodeType 35 36 def getFirstChild(self, node): 37 return node.firstChild 38 39 def getNextSibling(self, node): 40 return node.nextSibling 41 42 def getParentNode(self, node): 43 return node.parentNode 44