使用Python编辑xml文件中的值

时间:2010-10-03 13:40:57

标签: python xml elementtree

嘿。我想在Python Web应用程序中设置config.xml文件。

我手动制作了 car.xml 。它看起来像这样:

<car>
    <lights>
        <blinkers>off</blinkers>
    </lights>
</car>

现在我想使用 xml.etree.ElementTree 来查看闪光灯是打开还是关闭。

import xml.etree.ElementTree as ET
tree = ET.parse('car.xml')
blinkers = tree.findtext('lights/blinkers')
print blinkers
> off

现在我想打开和关闭闪光灯,我该怎么做?

5 个答案:

答案 0 :(得分:2)

您可以通过调用父节点的remove方法来删除节点, 并通过调用ET.SubElement:

插入节点
import xml.etree.ElementTree as ET

def flip_lights(tree):
    lights = tree.find('lights')
    state=get_blinker(tree)
    blinkers = tree.find('lights/blinkers')
    lights.remove(blinkers)
    new_blinkers = ET.SubElement(lights, "blinkers")
    new_blinkers.text='on' if state=='off' else 'off'

def get_blinker(tree):
    blinkers = tree.find('lights/blinkers')
    return blinkers.text

tree = ET.parse('car.xml')
print(get_blinker(tree))
# off
flip_lights(tree)
print(get_blinker(tree))
# on
flip_lights(tree)
print(get_blinker(tree))
# off
flip_lights(tree)
print(get_blinker(tree))
# on
tree.write('car2.xml')

答案 1 :(得分:2)

如果不考虑使用XML而不是Python模块来管理配置文件的优点,请按以下步骤操作lxml

>>> from lxml import etree
>>> xml = """<car>
   <lights>
      <blinkers>on</blinkers>
   </lights>
</car>"""
>>> doc = etree.fromstring(xml)
>>> elm = doc.xpath("/car/lights/blinkers")[0]
>>> elm.text="off"
>>> etree.tostring(doc)
'<car>\n   <lights>\n      <blinkers>off</blinkers>\n   </lights>\n</car>'

答案 2 :(得分:1)

看看this article

但请考虑AaronMcSmooth上面的评论 - 这可能是解决整体问题的错误方法。

答案 3 :(得分:0)

使用beautifulstonesoup。以下是有关修改xml的部分:

http://www.crummy.com/software/BeautifulSoup/documentation.html#Modifying%20the%20Parse%20Tree

答案 4 :(得分:0)

XML是一种存储配置设置的相当差的方法。首先,XML在设置环境中并不完全是人类友好的。特别是在Python Universe中,最好使用设置模块(如@AaronMcSmooth评论)。遗憾的是,Java世界中的许多项目(错误?)都使用XML进行设置,从而使其成为一种趋势。我认为这种趋势真的很糟糕。使用本机设置(Python中的模块)或像YAML更人性化的东西。