我有一个XML文件,正在使用Python进行编辑,并且我已经设置了可以成功修改我想要的所有元素的代码,但是当涉及到字段属性时,它似乎并没有更新。问题在于,对于数据表中的每个字段,XML都不区分一个字段和下一个字段,因此所有XML标签都相同:
<attr>
<attrlabl>STATE_NAME</attrlabl>
<attrdef>State Name</attrdef>
<attrdefs>HRSA GDW</attrdefs>
<attrdomv>
<udom>2010</udom>
</attrdomv>
</attr>
<attr>
<attrlabl>County</attrlabl>
<attrdef>County Name</attrdef>
<attrdefs>HRSA GDW</attrdefs>
<attrdomv>
<udom>2010</udom>
</attrdomv>
</attr>
<attr>
<attrlabl>STCOFIPS</attrlabl>
<attrdef>State/County FIPS ID</attrdef>
<attrdefs>HRSA GDW</attrdefs>
<attrdomv>
<udom>2010</udom>
</attrdomv>
</attr>
我正在尝试使用Python修改属性“ attrdefs”,然后提交更改:
import arcpy, sys
from xml.etree.ElementTree import ElementTree
from xml.etree.ElementTree import Element, SubElement
from arcpy import env
env.overwriteOutput = True
fcpath = r"...\HL Metadata to BR Sample Data.gdb\NCI20102014_All_Cancer_County"
translatorpath = r"...\ARCGIS2FGDC.xml"
xmlfile = r"...\FullMetaFC.xml"
arcpy.ExportMetadata_conversion(fcpath, translatorpath, xmlfile)
tree = ElementTree() # make an ElementTree object
tree.parse(xmlfile) # read the xml into the ElementTree
#FIELD UPDATING HERE
lab = tree.find("eainfo/detailed/attr/attrdefs")
ele = tree.find("eainfo/detailed")
for e in ele.iter("attrlabl"):
# loop through children pulling out nodes which have a attrlabl tag
#print e.text
# do some sort if IF THEN logic check and update as necessary
if e.text == "STATE_NAME":
lab.text = "NAME OF THE STATE"
#COMMIT UPDATES TO XML#
tree.write(xmlfile)
运行此代码不会产生任何错误;它不会为所需字段更新“ attrdefs”字段。如果我向udpate添加其他元素,例如:
public_date = tree.find("idinfo/citation/citeinfo/pubdate")
title.text = "20180725"
该字段将更新得很好,所以我怀疑问题出在IF / THEN语句上。