如何使用 xml.etree.ElementTree 有条件地将属性插入 Python 中的节点

How to conditionally insert an attribute into a node in Python using xml.etree.ElementTree

我正在使用 Python 的 xml.etree.ElementTree 构建 XML 文档,但无法有条件地将属性插入节点。这是我的代码示例:

Attr1="stamps"
Attr2="ghouls"
Attr3=""   

node = ET.SubElement(root_node, "ChildNode1",
                         Attr1=Attr1,
                         Attr2=Attr2,
                         Attr3=Attr3)

很简单,输出完全符合预期。但是,如果值为 None,我看到的许多 XML 文档会完全排除该属性。我该怎么做呢?类似于:

Attr1="stamps"
Attr2="ghouls"
Attr3=""   

node = ET.SubElement(root_node, "ChildNode1",
                         Attr1=Attr1,
                         Attr2=Attr2,
                         (Attr3=Attr3 if Attr != "" else pass))

但是库不支持这种语法。我知道我可以做一个 if 语句并为整个节点复制代码减去条件值,但我不想多次复制代码。有使用 ElementTree 库的快速简便的方法吗?

只需先创建元素,然后再添加属性

node = ET.SubElement(root_node,"ChildNode1",Attr1=Attr1,Attr2=Attr2)
if Attr3 != "":
    node.attrib["Attr3"] = Attr3

同样的方法可以用 Attr1Attr2 如果你担心它们是空的。

ElementTree 将元素的所有属性保存在对象的 attrib 属性中可用的字典中。键是属性名称,值是属性值。

创建字典是操作关键字参数的一种简单方法。

attrs = {}

attrs["Attr1"] = "stamps"
attrs["Attr2"] = "ghouls"
if Attr != "":
    attrs["Attr3"] = Attr

node = ET.SubElement(root_node, "ChildNode1", **attrs)