修改xml文件python

问题描述 投票:0回答:2
python xml elementtree
2个回答
1
投票

您可以检查存储库标签是否在元数据标签列表内,如果没有则创建 SubElement()。并且不要忘记注册您的名称空间:


import xml.etree.ElementTree as ET

tree = ET.parse("abc.nuspec")
root = tree.getroot()

namespaces = {node[0]: node[1] for event, node in ET.iterparse("abc.nuspec", events=['start-ns'])}
print("My Namespaces:", namespaces,'\n')
for ns in namespaces:
    ET.register_namespace(ns, namespaces[ns])
    

for meta in root.findall("metadata", namespaces):
    if meta.findall("repository", namespaces):
        pass
    else:
        rep = ET.SubElement(meta, "repository")
        rep.set("url", "https://github.com/test/test-repo")
        rep.set("type", "get" )
        
ET.dump(root)

tree1 = ET.ElementTree(root)
ET.indent(tree1, space= '  ')
tree1.write('abc_new.nuspec', encoding="utf-8", xml_declaration=True)

0
投票

谢谢,这对我有用,这里,如果meta.findall("repository", namespaces)返回true,并且如果已经有任何值,如何修改url的值?说测试-repo-1? .

一种有效的方法是删除存储库元素并创建新元素。

                if meta.findall("repository", namespaces):
                    for ele in meta.iter():
                        if ele.tag.endswith("repository"):
                            meta.remove(ele)
                    rep = ET.SubElement(meta, "repository")
                    rep.set("url", "https://github.com/incontact/test-repo-1")
                    rep.set("type", "nuget")
                else:
                    rep = ET.SubElement(meta, "repository")
                    rep.set("url", "https://github.com/incontact/test-repo-1")
                    rep.set("type", "nuget")

还有更好的方法吗?

© www.soinside.com 2019 - 2024. All rights reserved.