在python的elementTree中插入xml条目

2024-09-27 23:25:45 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在每次调用此方法时插入或更新匹配的条目?你知道吗

def makeXml(path):
    root = Element("modules")
    tree = ElementTree(root)
    childPath = Element(os.path.basename(path).split(".")[0])
    childPath.set("path", path)
    root.append(childPath)
    print etree.tostring(root)

当我第一次调用该方法时,它应该创建一个新条目。你知道吗

makeXml("~/Desktop/filterList.mod")

第一个打印<modules><filterList path="~/Desktop/filterList.mod" /></modules>

makeXml("~/Documens/sorter.mod")

但我想当同一个方法执行时,它应该添加一个新的条目,比如

<modules>
<filterList path="~/Desktop/filterList.mod" />
<sorter path="~/Documens/sorter.mod" />
</modules>

但是它没有发生,反而被覆盖了。你知道吗


Tags: path方法modulesmodtreedef条目root
1条回答
网友
1楼 · 发布于 2024-09-27 23:25:45

这是因为函数makeXML不是静态的,所以它不会记住任何关于其他执行时间的信息。一个简单的解决方案是将其包装到一个类中。你知道吗

更新:我不确定您是如何定义unique的,但我猜它可能是通过标记名或路径来定义的。不管是哪种方式,它都是一个简单的问题,即存储所有以前看到的项目并进行检查。你知道吗

例如:

class makeXmlContainer:
    def __init__(self):
        self.root = Element("modules")
        self.alreadyseen = []

    def makeXml(self, path):
        # Uncomment if uniqueness is defined by tag name.
        #tagname = os.path.basename(path).split(".")[0]
        #if tagname in self.alreadyseen:
        #    return
        #self.alreadyseen.append(tagname)

        # Uncomment if uniqueness if defined by path.
        #if path in self.alreadyseen:
        #    return
        #self.alreadyseen.append(path)

        childPath = Element(os.path.basename(path).split(".")[0])
        childPath.set("path", path)
        self.root.append(childPath)
        print etree.tostring(self.root)

演示:

>>> foo = makeXmlContainer()
>>> foo.makeXml('foo/bar')
<modules><bar path="foo/bar"/></modules>
>>> foo.makeXml('bing/bang')
<modules><bar path="foo/bar"/><bang path="bing/bang"/></modules>

相关问题 更多 >

    热门问题