pythonxml查找和表示

2024-09-30 10:30:47 发布

您现在位置:Python中文网/ 问答频道 /正文

在与python/etree进行了一天的战斗后,没有取得相当大的成功:

我有一个xml文件(项目.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>

问题

  1. 阅读此文件
  2. 查找父元素名为“layer”且类为“SvgMarker”的所有prop元素
  3. 将v值乘以1.5
  4. 把内容写回去

如果有更简单的事,我不会坚持。在


Tags: 文件项目layer元素内容sizelinexml
2条回答

这对你有帮助

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

为了执行乘法,您需要处理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

希望这有帮助。在

相关问题 更多 >

    热门问题