【问题标题】:How to conditionally insert an attribute into a node in Python using xml.etree.ElementTree如何使用 xml.etree.ElementTree 有条件地将属性插入 Python 中的节点
【发布时间】:2016-02-17 23:24:17
【问题描述】:

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

【问题讨论】:

    标签: python xml elementtree


    【解决方案1】:

    先创建元素,再添加属性

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

    如果您担心它们是空的,可以使用 Attr1Attr2 执行相同的方法。

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

    【讨论】:

    • 不知道 node.attrib 函数。虽然其他答案有效,但这似乎是最好的方法。明天早上我会尝试并选择一个答案,谢谢!
    【解决方案2】:

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

    attrs = {}
    
    attrs["Attr1"] = "stamps"
    attrs["Attr2"] = "ghouls"
    if Attr != "":
        attrs["Attr3"] = Attr
    
    node = ET.SubElement(root_node, "ChildNode1", **attrs)
    

    【讨论】:

    • 字典是一个很好的建议,它应该可以完成工作。我将从一个空字典开始,如果值存在,则只附加一个键值对。谢谢!
    • 编辑后的答案是我所采用的。我喜欢操作字典并将其全部卸载,而不是不断更新节点
    猜你喜欢
    • 2022-09-22
    • 1970-01-01
    • 2015-04-11
    • 2014-02-18
    • 1970-01-01
    • 2019-02-14
    • 2023-02-07
    • 1970-01-01
    • 2018-02-27
    相关资源
    最近更新 更多