【问题标题】:How to manipulate xml based on the specific tags?如何根据特定的标签来操作xml?
【发布时间】:2023-02-03 13:57:23
【问题描述】:

有一个像这样的 XML

    <OUTER>
            <TYPE>FIRST</TYPE>
            <FIELD1>1</FIELD1>
            <ID>55056</ID>
            <TASK>
                <FILE>
                    <OPTIONS>1</OPTIONS>
                </FILE>
            </TASK>
    </OUTER>
    <OUTER>
                <TYPE>SECOND</TYPE>
                <FIELD1>2</FIELD1>
                <ID>58640</ID>
                <TASK>
                    <FILE>
                        <OPTIONS>1</OPTIONS>
                    </FILE>
                </TASK>
    </OUTER>

标签中的文字ID需要用新值更新,它存在于这个变量中NEW_ID1.比较应该发生在类型标记,即仅当文本 == FIRST 时,我们需要用新 ID 替换 ID,并类似地写回 XML,如果类型 = 第二, 更新 ID 为NEW_ID2等等,怎么做?我尝试了以下方式,

tree = ET.parse("sample.xml")
root = tree.getroot()

det = tree.findall(".//OUTER[TYPE='FIRST']")
.
.
ID = NEW_ID1
tree.write("sample.xml")

但无法进一步操纵它

【问题讨论】:

    标签: python python-3.x xml xml-parsing


    【解决方案1】:

    你很接近,除了 TYPE 不是一个属性,它是一个标签,所以 [TYPE='FIRST'] 将不起作用。

    相反,您可以做的是遍历所有 TYPE 标签,并测试它们是否包含 "FIRST" 作为文本值。然后你可以更改id并将其写回。

    例如:

    tree = ET.parse("sample.xml")
    root = tree.getroot()
    
    for element in tree.findall(".//TYPE"):
        if element.text == "FIRST":
            element.set("id", "NEW_ID1")
    
    tree.write("sample.xml")
    

    注意:我假设您的 xml 文件不仅包含您问题中的标记。一个 xml 文件中应该只有一个根元素。

    【讨论】:

      猜你喜欢
      • 2020-12-20
      • 2022-06-16
      • 1970-01-01
      • 2021-10-14
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      相关资源
      最近更新 更多