2016-09-08 2 views
0

После борьбы день с питона/etree без значительного успеха:питон XML найти и заменить

У меня есть файл 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> 

на вопросы

  1. прочитайте этот файл
  2. найти все элементы prop, которые имеют родительский элемент namend «layer» с классом «SvgMarker»
  3. умножить значение V с 1,5
  4. написать содержание назад

Я не пристают на etree, если есть что-то проще.

ответ

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 

Надеюсь, это поможет.

Смежные вопросы