3 ÝPf…ã@sBddlmZmZmZddlmZddlmZGdd„dejƒZ dS)é)Úabsolute_importÚdivisionÚunicode_literals)ÚNodeé)Úbasec@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú TreeWalkercCsô|jtjkr tj|j|j|jfS|jtjtj fkr>tj |j fS|jtj kr²i}xJt |jjƒƒD]8}|j|ƒ}|jr†|j||j|jf<q^|j|d|jf<q^Wtj|j|j||jƒfS|jtjkrÊtj|j fS|jtjtjfkrätjfStj|jfSdS)N)ZnodeTyperZDOCUMENT_TYPE_NODErZDOCTYPEÚnameZpublicIdZsystemIdZ TEXT_NODEZCDATA_SECTION_NODEZTEXTZ nodeValueZ ELEMENT_NODEÚlistZ attributesÚkeysZgetAttributeNodeZ namespaceURIÚvalueZ localNameZELEMENTZnodeNameZ hasChildNodesZ COMMENT_NODEÚCOMMENTZ DOCUMENT_NODEZDOCUMENT_FRAGMENT_NODEZDOCUMENTZUNKNOWN)ÚselfÚnodeZattrsÚattr©rú/usr/lib/python3.6/dom.pyÚgetNodeDetails s$        zTreeWalker.getNodeDetailscCs|jS)N)Z firstChild)rrrrrÚ getFirstChild$szTreeWalker.getFirstChildcCs|jS)N)Z nextSibling)rrrrrÚgetNextSibling'szTreeWalker.getNextSiblingcCs|jS)N)Z parentNode)rrrrrÚ getParentNode*szTreeWalker.getParentNodeN)Ú__name__Ú __module__Ú __qualname__rrrrrrrrrsrN) Z __future__rrrZxml.domrÚrZNonRecursiveTreeWalkerrrrrrÚs