Python和XML:更新属性并编写文件问题

时间:2016-01-29 00:45:49

标签: python xml setattribute

我尝试更新子项的属性,然后将更新的元素写入文档。我遇到了这个错误:' AttributeError:元素实例没有属性' getiterator' '

我在拼凑了一堆教程和资源之后做了这个,所以让我知道是否有其他突出的东西(不太清楚我在做什么)。谢谢!

这是我到目前为止所拥有的:

在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 个答案:

答案 0 :(得分:1)

使用Library A搜索并设置元素的属性:

xml.etree.ElementTree

我们使用简单的XPath expression来查找具有所需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) 属性值的所有prepData元素。对于找到的每个元素,我们通过.attrib设置a_assetType属性值。