Varia's website
https://varia.zone
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.4 KiB
44 lines
1.4 KiB
5 days ago
|
from __future__ import absolute_import, division, unicode_literals
|
||
|
|
||
|
from xml.dom import Node
|
||
|
|
||
|
from . import base
|
||
|
|
||
|
|
||
|
class TreeWalker(base.NonRecursiveTreeWalker):
|
||
|
def getNodeDetails(self, node):
|
||
|
if node.nodeType == Node.DOCUMENT_TYPE_NODE:
|
||
|
return base.DOCTYPE, node.name, node.publicId, node.systemId
|
||
|
|
||
|
elif node.nodeType in (Node.TEXT_NODE, Node.CDATA_SECTION_NODE):
|
||
|
return base.TEXT, node.nodeValue
|
||
|
|
||
|
elif node.nodeType == Node.ELEMENT_NODE:
|
||
|
attrs = {}
|
||
|
for attr in list(node.attributes.keys()):
|
||
|
attr = node.getAttributeNode(attr)
|
||
|
if attr.namespaceURI:
|
||
|
attrs[(attr.namespaceURI, attr.localName)] = attr.value
|
||
|
else:
|
||
|
attrs[(None, attr.name)] = attr.value
|
||
|
return (base.ELEMENT, node.namespaceURI, node.nodeName,
|
||
|
attrs, node.hasChildNodes())
|
||
|
|
||
|
elif node.nodeType == Node.COMMENT_NODE:
|
||
|
return base.COMMENT, node.nodeValue
|
||
|
|
||
|
elif node.nodeType in (Node.DOCUMENT_NODE, Node.DOCUMENT_FRAGMENT_NODE):
|
||
|
return (base.DOCUMENT,)
|
||
|
|
||
|
else:
|
||
|
return base.UNKNOWN, node.nodeType
|
||
|
|
||
|
def getFirstChild(self, node):
|
||
|
return node.firstChild
|
||
|
|
||
|
def getNextSibling(self, node):
|
||
|
return node.nextSibling
|
||
|
|
||
|
def getParentNode(self, node):
|
||
|
return node.parentNode
|