2016-01-29 6 views
1

Я пытаюсь обновить атрибут для дочернего элемента, а затем записать этот обновленный элемент в документ. Я столкнулся с этой ошибкой: «AttributeError: экземпляр элемента не имеет атрибута« getiterator »Python и XML: обновить атрибут и записать проблемы с файлом

Я сделал это после сборки кучи учебников и ресурсов, поэтому дайте мне знать, если что-то еще выделяется (не слишком уверенно что я делаю). Благодаря!

Вот что я до сих пор:

Внутри XML документ:

<?xml version="1.0" ?> 
<notes> 
    <prepData a_assetType="Geometry" b_assetSel="[u'pPyramid1', u'pTorus1']"/> 
    <prepData a_assetType="Rig" b_assetSel="[u'pPyramid1']"/> 
    <prepData a_assetType="Controls" b_assetSel="[u'pPyramid1']"/> 
</notes> 

код записи XML:

xml_file_path = "{0}/{1}_prepData.xml".format(info_dir, asset_type) 
doc = ET.parse(xml_file_path) 
dom = parse(xml_file_path) 
root = doc.getroot() 

nodes = dom.getElementsByTagName('prepData') 

match = [] 
for node in nodes: 
    if node.attributes['a_assetType'].value == asset_type: 
     match.append(node) 

for node in match: 
    node.setAttribute("b_assetSel", str(asset_sel)) 


out = ET.tostring(node) 
dom = minidom.parseString(out) 
xml_file = open("{0}/{1}_prepData.xml".format(info_dir, asset_name), "w") 
xml_file.write(dom.toprettyxml()) 
xml_file.close() 

ответ

1

Используйте xml.etree.ElementTree для поиска и установить атрибут элемента:

import xml.etree.ElementTree as ET 

doc = ET.parse(xml_file_path) 
root = doc.getroot() 

for elm in root.findall(".//prepData[@a_assetType='%s']" % asset_type): 
    elm.attrib["b_assetSel"] = str(asset_sel) 

out = ET.tostring(root) 
print(out) 

Здесь мы используем простой XPath expression, чтобы найти все элементы prepData с желаемым значением атрибута a_assetType. Для каждого найденного элемента мы устанавливаем значение атрибута b_assetSel через .attrib.

+0

Это сработало! Большое объяснение тоже, спасибо за то, что нашли время: D –

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

  • Нет связанных вопросов^_^