与python / etree战斗一天后没有取得相当大的成功:
我有一个xml文件(items.xml)
<symbols>
<symbol>
<layer class="SvgMarker">
<prop k="size" v="6.89"/>
</layer>
</symbol>
<symbol>
<layer class="SvgMarker">
<prop k="size" v="3.56"/>
</layer>
</symbol>
<symbol>
<layer class="line">
<prop k="size" v="1"/>
</layer>
</symbol>
</symbols>
问题
如果有更容易的话,我不会坚持使用etree。
答案 0 :(得分:1)
这会对你有所帮助
import xml.etree.ElementTree as ET
tree = ET.parse('items.xml') # Path to input file
root = tree.getroot()
for prop in root.iter('.//*[@class="SvgMarker"]/prop'):
prop.set('v', str(float(prop.get('v')) * 1.5))
tree.write('out.xml', encoding="UTF-8")
参考:https://docs.python.org/2/library/xml.etree.elementtree.html#example
答案 1 :(得分:0)
您需要处理xml标记中的层次结构及其类型转换以执行乘法。我用你的xml测试了下面的代码,它运行正常。
import xml.etree.ElementTree as ET
tree = ET.parse('homemade.xml') #Step 1
root = tree.getroot()
for symbol in tree.findall('symbol'):
for layer in symbol.findall('layer'):
class_ = layer.get('class')
if(class_=="SvgMarker"): #Step 2
for prop in layer.findall('prop'):
new_v = prop.get('v')
new_v = float(new_v)*1.5 #Step 3
prop.set('v',str(new_v))
outFile = open('homemade.xml', 'w')
tree.write(outFile) #Step 4
希望这有帮助。