嘿。我想在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
现在我想打开和关闭闪光灯,我该怎么做?
答案 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更人性化的东西。