如何将python类添加到xml解析程序中

时间:2012-11-06 11:48:17

标签: python

我有一个程序,它将输入xml并打印相同的xml作为输出。我如何为此实现类和方法?

import xml.etree.ElementTree as ET
import sys   
doc       = ET.parse("users.xml")
root      = doc.getroot()
root_new  = ET.Element("users") 
for child in root:
    username             = child.attrib['username']
    password             = child.attrib['password']   
    # create "user" here
    user    = ET.SubElement(root_new, "user") 
    user.set("username",username)               
    user.set("password",password) 
    #checking attribute for skipping KeyError
    if 'remote_access' in child.attrib:
        remote_access   = child.attrib['remote_access']
        user.set("remote_access",remote_access) 
    for g in child.findall("group"):
        # create "group" here
        group     = ET.SubElement(user,"group")  
        if g.text != "lion":
            group.text = g.text 
tree = ET.ElementTree(root_new)
tree.write(sys.stdout)

如何将此转换为类概念。提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,可能有数千种方法可以做到。 你想要一个例子,这里是(我假设你的代码正在运行):

import xml.etree.ElementTree as ET
import sys   


class MyXmlParser(object):

    def __init__(self, xml_file_name):
        self.doc  = ET.parse(xml_file_name)
        self.root = doc.getroot()

    def do_something(self, output = sys.stdout):
        root_new  = ET.Element("users") 
        for child in self.root:
            username             = child.attrib['username']
            password             = child.attrib['password']   
            # create "user" here
            user    = ET.SubElement(root_new, "user") 
            user.set("username",username)               
            user.set("password",password) 
            # checking attribute - skip KeyError
            try:
                remote_access   = child.attrib['remote_access']
                user.set("remote_access", remote_access) 
            except KeyError:
                pass

            for g in child.findall("group"):
                # create "group" here
                group     = ET.SubElement(user,"group")  
                if g.text != "lion":
                    group.text = g.text 
        tree = ET.ElementTree(root_new)
        tree.write(output)

def main():
    my_parser = MyXmlParser("users.xml")
    my_parser.do_something()

if __name__ == '__main__':
    main()