-–更新3:我已经完成了将所需数据更新到xml文件中的脚本,但是从编写的文件中删除了以下代码。为什么是这样?我该如何更换?
<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='ANZMeta.xsl'?>
当前的工作代码(上述问题除外)。
import os, xml, arcpy, shutil from xml.etree import ElementTree as et path=os.getcwd() arcpy.env.workspace = path FileList = arcpy.ListFeatureClasses() FileCount = len(FileList) zone="_Zone" for File in FileList: FileDesc_obj = arcpy.Describe(File) FileNm=FileDesc_obj.file newMetaFile=FileNm+"_BaseMetadata.xml" check_meta=os.listdir(path) if FileNm+'.xml' in check_meta: shutil.copy2(FileNm+'.xml', newMetaFile) else: shutil.copy2('L:\Data_Admin\QA\Metadata_python_toolset\Master_Metadata.xml', newMetaFile) tree=et.parse(newMetaFile) print "Processing: "+str(File) for node in tree.findall('.//title'): node.text = str(FileNm) for node in tree.findall('.//northbc'): node.text = str(FileDesc_obj.extent.YMax) for node in tree.findall('.//southbc'): node.text = str(FileDesc_obj.extent.YMin) for node in tree.findall('.//westbc'): node.text = str(FileDesc_obj.extent.XMin) for node in tree.findall('.//eastbc'): node.text = str(FileDesc_obj.extent.XMax) for node in tree.findall('.//native/nondig/formname'): node.text = str(os.getcwd()+"\\"+File) for node in tree.findall('.//native/digform/formname'): node.text = str(FileDesc_obj.featureType) for node in tree.findall('.//avlform/nondig/formname'): node.text = str(FileDesc_obj.extension) for node in tree.findall('.//avlform/digform/formname'): node.text = str(float(os.path.getsize(File))/int(1024))+" KB" for node in tree.findall('.//theme'): node.text = str(FileDesc_obj.spatialReference.name +" ; EPSG: "+str(FileDesc_obj.spatialReference.factoryCode)) print node.text projection_info=[] Zone=FileDesc_obj.spatialReference.name if "GCS" in str(FileDesc_obj.spatialReference.name): projection_info=[FileDesc_obj.spatialReference.GCSName, FileDesc_obj.spatialReference.angularUnitName, FileDesc_obj.spatialReference.datumName, FileDesc_obj.spatialReference.spheroidName] print "Geographic Coordinate system" else: projection_info=[FileDesc_obj.spatialReference.datumName, FileDesc_obj.spatialReference.spheroidName, FileDesc_obj.spatialReference.angularUnitName, Zone[Zone.rfind(zone)-3:]] print "Projected Coordinate system" x=0 for node in tree.findall('.//spdom'): for node2 in node.findall('.//keyword'): print node2.text node2.text = str(projection_info[x]) print node2.text x=x+1 tree.write(newMetaFile)
-–更新1&2:多亏了Aleyna,我有了下面的基本代码
import os, xml, arcpy, shutil from xml.etree import ElementTree as et CodeString=['northbc','southbc', '<nondig><formname>'] nondig='nondigital' path=os.getcwd() arcpy.env.workspace = path xmlfile = path+"\\test.xml" FileList = arcpy.ListFeatureClasses() FileCount = len(FileList) for File in FileList: FileDesc_obj = arcpy.Describe(File) FileNm=FileDesc_obj.file newMetaFile=FileNm+"_Metadata.xml" shutil.copy2('L:\Data_Admin\QA\Metadata_python_toolset\Master_Metadata.xml', newMetaFile) tree=et.parse(newMetaFile) for node in tree.findall('.//northbc'): node.text = str(FileDesc_obj.extent.YMax) for node in tree.findall('.//southbc'): node.text = str(FileDesc_obj.extent.YMin) for node in tree.findall('.//westbc'): node.text = str(FileDesc_obj.extent.XMin) for node in tree.findall('.//eastbc'): node.text = str(FileDesc_obj.extent.XMax) for node in tree.findall('.//native/nondig/formname'): node.text = nondig tree.write(newMetaFile)
问题在于处理类似xml的代码
- <spdom> <keyword thesaurus="">GDA94</keyword> <keyword thesaurus="">GRS80</keyword> <keyword thesaurus="">Transverse Mercator</keyword> <keyword thesaurus="">Zone 55 (144E - 150E)</keyword> </spdom>
由于关键字thes …在范围内不是唯一的<spdom>,我们可以按以下顺序更新这些值:
<spdom>
FileDesc_obj.spatialReference.name
u’GCS_GDA_1994’
-原始帖子-
我正在构建一个程序,以从库中的空间文件生成xml元数据文件。我已经创建了脚本来从文件中提取所需的空间和属性数据,并基于文件的shp和文本文件创建索引,但是现在我想将此信息写入通过替换为写成安腾标准的基本元数据xml文件中通用/静态元素持有的值…
因此,例如,我想替换以下xml代码
<northbc>8097970</northbc> <southbc>8078568</southbc>
与
<northbc> GeneratedValue_[desc.extent.XMax] /<northbc> <southbc> GeneratedValue_[desc.extent.XMax] </southbc>
问题是,显然和之间的数字/值将不同。
类似地,对于xml标签(例如<title>, <nondig><formname>etc …),在后一个示例中,两个标签必须一起搜索,因为formname出现多次(不是唯一的)。
<title>, <nondig><formname>
我正在使用Python正则表达式手册[here] [1],
使用上面的给定标签:
import os import xml from xml.etree import ElementTree as et path = r"/your/path/to/xml.file" tree = et.parse(path) for node in tree.findall('.//northbc'): node.text = "New Value" tree.write(path)
在此,XPATH .//northbc返回XML文档中的所有’northbc’节点。您可以轻松地根据自己的需要定制代码。