【问题标题】:How to use python to find the element and replace the value in the same name of element in xml file?如何使用python查找元素并替换xml文件中同名元素的值?
【发布时间】:2018-11-23 22:42:18
【问题描述】:

我正在尝试查找元素“name”的所有值,而不是“None”,并将它们替换为新值“Anderson”。所以我希望“Tom”、“John”和“Mary”这两个替换为“Anderson”,但7777号的“None”这个名字不会改变。

<aaa>
  <bbb>
    <name>Tom</name><number>1111</number>
    <name>Tom</name><number>2222</number>
    <name>John</name><number>3333</number>
  </bbb>
  <ccc>
    <name>None</name><number>7777</number>
    <name>Mary</name><number>8888</number>
  </ccc>
</aaa>

我只知道如何使用“tree.find()”来替换特定元素的一个值,但我不知道如何查找和替换全部。

例如:

a = tree.find('aaa/bbb/name')
tree.find('aaa/bbb/name').text = 'Anderson'

谁能给我一个达到要求的例子吗?非常感谢。

【问题讨论】:

    标签: python xml replace find


    【解决方案1】:

    以下 XPath 表达式可以检索您询问的节点 .//name[text()!='None'] ElementTree 虽然对 XPath 的支持非常有限,但我不确定它是否支持 text() 函数。

    另一种选择是:

    for name in tree.findall(".//name"):
        if name.text == 'None': continue
        # Do stuff here
        name.text = "Anderson"
    

    https://docs.python.org/3.5/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element.findall

    【讨论】:

    • 可以达到我的要求!感谢您的帮助!
    • @dnisqa2delta 不要忘记您可以接受为有用的答案投票
    猜你喜欢
    • 2013-04-11
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多