【发布时间】:2021-02-11 22:00:21
【问题描述】:
我正在尝试查找 XML 属性并将其替换为基于索引的新值。如果我将属性值本身硬编码到我的查找/替换函数中,我可以替换属性值,但我需要通过索引来执行此操作,特别是对于
XML(“foo_bar.xml”)
<?xml version="1.0" encoding="UTF-8"?>
<Overlay>
<foo_1>
<bar key="value">text_1</bar>
<bar key="value">text_2</bar>
<bar key="value">text_3</bar>
</foo_1>
<foo_2>
<bar key="value">text_4</bar>
<bar key="value">text_5</bar>
<bar key="value">text_6</bar>
</foo_2>
</Overlay>
脚本
import lxml.etree as ET
xml = ET.parse("C:\\Users\\mdl518\\Desktop\\bar_foo.xml")
tree=xml.getroot()
new_val_1 = float(100/202)
new_val_2 = float(200/500)
new_val_3 = float(4/44)
new_val_4 = float(4/1000)
# Find and replace first and second "bar" subelement attribute values for each "foo" parent element
for elem in tree.getiterator():
if elem.text:
elem.text=elem.text.replace(text_1,new_val_1)
if elem.text:
elem.text=elem.text.replace(text_2,new_val_2)
if elem.text:
elem.text=elem.text.replace(text_4,new_val_3)
if elem.text:
elem.text=elem.text.replace(text_5,new_val_4)
print(elem.text)
想要的结果
<?xml version="1.0" encoding="UTF-8"?>
<Overlay
<foo_1>
<bar key="value">new_val_1</bar>
<bar key="value">new_val_2</bar>
<bar key="value">text</bar>
</foo_1>
<foo_2>
<bar key="value">new_val_3</bar>
<bar key="value">new_val_4</bar>
<bar key="value">text</bar>
</foo_2>
</Overlay>
是否有一种方便的方法来索引子元素属性值并将它们替换为所需的值(即“new_val_#”)并写入 XML?非常感谢任何帮助!
【问题讨论】:
-
请显示所需的结果,因为我对您的 attributes 含义感到困惑,因为您没有在代码中显示
elem.attrib的尝试。 -
我没有看到希望的结果是如何使用 key 属性的。
标签: python xml attributes lxml elementtree