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

时间:2016-02-17 23:24:18

标签: python xml 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库快速简便的方法?

2 个答案:

答案 0 :(得分:4)

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

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

如果您担心那些是空的,可以使用 Attr1 Attr2 完成相同的方法。

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

答案 1 :(得分:2)

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

attrs = {}

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

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