gpt4 book ai didi

python - 使用 ElementTree 修改 XML 文件

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:07 25 4
gpt4 key购买 nike

我正在尝试使用 Python 执行以下操作:

  • 获取“price”值并改变它
  • 找到“price_qty”并根据“price”插入具有新等级和不同价格的新行。
  • 到目前为止我只能找到价格并更改它并在大约正确的位置插入行但是我找不到如何到达那里的“项目”和“数量”和“价格”属性的方法,没有任何效果所以远...

这是我的原始 xml:

     <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<body start="20.04.2014 10:02:60">
<pricelist>
<item>
<name>LEO - red pen</name>
<price>31,4</price>
<price_snc>0</price_snc>
<price_ao>0</price_ao>
<price_qty>
<item qty="150" price="28.20" />
<item qty="750" price="26.80" />
<item qty="1500" price="25.60" />
</price_qty>
<stock>50</stock>
</item>
</pricelist>

新的 xml 应该是这样的:

    <pricelist>
<item>
<name>LEO - red pen</name>
<price>31,4</price>
<price_snc>0</price_snc>
<price_ao>0</price_ao>
<price_qty>
<item qty="10" price="31.20" /> **-this is the new line**
<item qty="150" price="28.20" />
<item qty="750" price="26.80" />
<item qty="1500" price="25.60" />
</price_qty>
<stock>50</stock>
</item>
</pricelist>

到目前为止我的代码:

import xml.etree.cElementTree as ET
from xml.etree.ElementTree import Element, SubElement

tree = ET.ElementTree(file='pricelist.xml')
root = tree.getroot()
pos=0

# price - raise the main price and insert new tier
for elem in tree.iterfind('pricelist/item/price'):
price = elem.text
newprice = (float(price.replace(",", ".")))*1.2

newtier = "NEW TIER"
SubElement(root[0][pos][5], newtier)
pos+=1

tree.write('pricelist.xml', "UTF-8")

结果:

...
<price_qty>
<item price="28.20" qty="150" />
<item price="26.80" qty="750" />
<item price="25.60" qty="1500" />
<NEW TIER /></price_qty>

感谢您的帮助。

最佳答案

不要使用固定索引。您已经有了 item 元素,为什么不使用它呢?

tree = ET.ElementTree(file='pricelist.xml')
root = tree.getroot()

for elem in tree.iterfind('pricelist/item'):
price = elem.findtext('price')
newprice = float(price.replace(",", ".")) * 1.2

newtier = ET.Element("item", qty="10", price="%.2f" % newprice)
elem.find('price_qty').insert(0, newtier)

tree.write('pricelist.xml', "UTF-8")

关于python - 使用 ElementTree 修改 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28782864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com