⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 expat6.py

📁 python web programming 部分
💻 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 + -