我需要使用Python处理XML文件中的值的帮助。
XML看起来像这样,但是有更多的植物:
<CATALOG>
<PLANT>
<COMMON>Bloodroot</COMMON>
<BOTANICAL>Sanguinaria canadensis</BOTANICAL>
<ZONE>4</ZONE>
<LIGHT>Mostly Shady</LIGHT>
<PRICE>2.44</PRICE>
<AVAILABILITY>031599</AVAILABILITY>
</PLANT>
<PLANT>
<COMMON>Columbine</COMMON>
<BOTANICAL>Aquilegia canadensis</BOTANICAL>
<ZONE>3</ZONE>
<LIGHT>Mostly Shady</LIGHT>
<PRICE>9.37</PRICE>
<AVAILABILITY>030699</AVAILABILITY>
</PLANT>
<PLANT>
<COMMON>Marsh Marigold</COMMON>
<BOTANICAL>Caltha palustris</BOTANICAL>
<ZONE>4</ZONE>
<LIGHT>Mostly Sunny</LIGHT>
<PRICE>6.81</PRICE>
<AVAILABILITY>051799</AVAILABILITY>
</PLANT>
</CATALOG>
我需要能够根据值更改值。
到目前为止,我已经拥有了:
if tree.find('.//COMMON').text == 'Bloodroot':
tree.find('.//PRICE').text = '3.50'
此代码有效,但这仅是因为它是第一个块。如果我这样做,什么都不会发生:
if tree.find('.//COMMON').text == 'Columbine':
tree.find('.//PRICE').text = '3.50'
有人可以在这里指出正确的方向吗?如何基于“ COMMON”值更改所有工厂的价格值。我也尝试了一些不同的方法,这些方法循环遍历xml文件没有运气。
谢谢!
答案 0 :(得分:0)
正如documentation for find所说,它在找到的第一个节点处停止。您需要遍历父节点以查找所有节点,然后检查该值。这是一个例子。
from xml.etree import ElementTree
with open("data.xml", "rb") as fo:
root = ElementTree.parse(fo)
for plantnode in root.findall("PLANT"):
if plantnode.find("COMMON").text == "Columbine":
pricenode = plantnode.find("PRICE")
print(pricenode.text)
pricenode.text = '3.50'
print(pricenode.text)