0

嘿。我想要一个 config.xml 文件用于 Python Web 应用程序中的设置。

我手动制作了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

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

4

5 回答 5

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')
于 2010-10-03T14:59:15.923 回答
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>'
于 2010-10-03T17:13:02.997 回答
1

看看这篇文章

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

于 2010-10-03T13:52:32.317 回答
0

使用美丽的石头汤。这是关于修改xml的部分:

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

于 2010-10-03T14:11:36.257 回答
0

XML 是一种相当糟糕的存储配置设置的方式。一方面,XML 在设置上下文中并不完全是人类友好的。特别是在 Python 世界中,最好使用设置模块(正如@AaronMcSmooth 评论的那样)。不幸的是,Java 世界中的许多项目(错误?)使用 XML 进行设置,从而使其成为一种趋势。我认为这种趋势真的很糟糕。使用本机设置(Python 中的模块)或更人性化的东西,例如 YAML。

于 2010-10-03T14:15:13.607 回答