📄 expat6.py
字号:
#!/usr/bin/pythonimport sysfrom xml.parsers import expatdef normalize_whitespace(text): return " ".join(text.split())DOCUMENT_NODE = 1ELEMENT_NODE = 2TEXT_NODE = 3class Node: def __init__(self): self.nextSibling = None self.prevSibling = None self.parentNode = None self.firstChild = None self.lastChild = None def appendChild(self,c): if self.firstChild: c.prevSibling = self.lastChild self.lastChild.nextSibling = c else: self.firstChild = c c.parentNode = self self.lastChild = cclass DocumentNode(Node): def __init__(self): Node.__init__(self) self.nodeType = DOCUMENT_NODE class ElementNode(Node): def __init__(self,name,attrs): Node.__init__(self) self.nodeType = ELEMENT_NODE self.attributes = attrs self.nodeName = nameclass TextNode(Node): def __init__(self,text): Node.__init__(self) self.nodeType = TEXT_NODE self.nodeValue = textclass TreeParser: def __init__(self): self.parser = expat.ParserCreate() self.parser.StartElementHandler = self.start_element self.parser.EndElementHandler = self.end_element self.parser.CharacterDataHandler = self.character_data self.topNode = DocumentNode() def parse(self,file): self.parser.ParseFile(file) return self.topNode def start_element(self,name,attrs): n = ElementNode(name,attrs) self.topNode.appendChild(n) self.topNode = n def character_data(self,data): n = TextNode(data) self.topNode.appendChild(n) def end_element(self,name): self.topNode = self.topNode.parentNodep = TreeParser()doc = p.parse(open(sys.argv[1]))def walk_tree(node,indent=0): if not node: return ispace = " "*4 while node: if node.nodeType == DOCUMENT_NODE: print "%sDOCUMENT_NODE" % (ispace*indent,) walk_tree(node.firstChild,indent+1) elif node.nodeType == ELEMENT_NODE: print "%sELEMENT_NODE: %s %s" % (ispace*indent, node.nodeName, node.attributes) walk_tree(node.firstChild,indent+1) elif node.nodeType == TEXT_NODE: print "%sTEXT_NODE : %s" % (ispace*indent, repr(node.nodeValue)) node = node.nextSibling walk_tree(doc)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -