dom.py 1.5 KB

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