我正在使用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库快速简便的方法?
答案 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)