gpt4 book ai didi

python - 使用 Python 在 XML 中查找和替换标签

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:20 25 4
gpt4 key购买 nike

我之前提出过类似的问题,但这个问题略有不同。我想使用 python 查找和替换 XML 标签。我正在使用 XML 作为一些 GIS shapefile 的元数据上传。在元数据编辑器中,我可以选择收集特定数据的日期。选项是“单一日期”、“多个日期”和“日期范围”。在包含一系列日期标签的第一个 XML 中,您将看到带有一些子元素“begdate”、“begtime”、“enddate”和 的标签“rngdates”。我想编辑这些标签,使其看起来像包含多个单个日期的第二个 XML。新标签是“mdattim”、“sngdate”和“caldate”。我希望这已经足够清楚了,但如果需要,请询问更多信息。 XML 是一头怪兽,我还没有完全理解它。

谢谢,迈克

第一个 XML:

<idinfo>
<citation>
<citeinfo>
<origin>My Company Name</origin>
<pubdate>05/04/2009</pubdate>
<title>Feature Class Name</title>
<edition>0</edition>
<geoform>vector digital data</geoform>
<onlink>.</onlink>
</citeinfo>
</citation>
<descript>
<abstract>This dataset represents the GPS location of inspection points collected in the field for the Site Name</abstract>
<purpose>This dataset was created to accompany the clients Assessment Plan. This point feature class represents the location within the area that the field crews collected related data.</purpose>
</descript>
<timeperd>
<timeinfo>
<rngdates>
<begdate>7/13/2010</begdate>
<begtime>unknown</begtime>
<enddate>7/15/2010</enddate>
<endtime>unknown</endtime>
</rngdates>
</timeinfo>
<current>ground condition</current>
</timeperd>

第二个 XML:

<idinfo>
<citation>
<citeinfo>
<origin>My Company Name</origin>
<pubdate>03/07/2011</pubdate>
<title>Feature Class Name</title>
<edition>0</edition>
<geoform>vector digital data</geoform>
<onlink>.</onlink>
</citeinfo>
</citation>
<descript>
<abstract>This dataset represents the GPS location of inspection points collected in the field for the Site Name</abstract>
<purpose>This dataset was created to accompany the clients Assessment Plan. This point feature class represents the location within the area that the field crews collected related data.</purpose>
</descript>
<timeperd>
<timeinfo>
<mdattim>
<sngdate>
<caldate>08-24-2009</caldate>
<time>unknown</time>
</sngdate>
<sngdate>
<caldate>08-26-2009</caldate>
</sngdate>
<sngdate>
<caldate>08-26-2009</caldate>
</sngdate>
<sngdate>
<caldate>07-07-2010</caldate>
</sngdate>
</mdattim>
</timeinfo>

到目前为止,这是我的 Python 代码:

folderPath = "Z:\ESRI\Figure_Sourcing\Figures\Metadata\IOR_Run_Metadata_2009"

for filename in glob.glob(os.path.join(folderPath, "*.xml")):

fullpath = os.path.join(folderPath, filename)

if os.path.isfile(fullpath):
basename, filename2 = os.path.split(fullpath)

root = ElementTree(file=r"Z:\ESRI\Figure_Sourcing\Figures\Metadata\Run_Metadata_2009\\" + filename2)

iter = root.getiterator()
#Iterate
for element in iter:
print element.tag

if element.tag == "begdate":
element.tag.replace("begdate", "sngdate")

最佳答案

我相信我成功地使代码工作了。如果您需要从现有 XML 文件更改某些标签,这将允许您编辑它们。我需要执行此操作以在批处理脚本中为某些 GIS shapefile 创建元数据,以更改某些日期值,具体取决于它们是单个日期、多个日期还是日期范围。

此网页帮助很大:http://lxml.de/tutorial.html

我还有一些工作要做,但这是我从最初的问题中寻找的答案 :) 我相信这可以用于许多其他应用程序。

# Set workspace location for XML files
folderPath = "Z:\ESRI\Figure_Sourcing\Figures\Metadata\IOR_Run_Metadata_2009"
# Loop through each file and search for files with .xml extension
for filename in glob.glob(os.path.join(folderPath, "*.xml")):

fullpath = os.path.join(folderPath, filename)

# Split file name from the directory path
if os.path.isfile(fullpath):
basename, filename2 = os.path.split(fullpath)
# Set variable to XML files
root = ElementTree(file=r"Z:\ESRI\Figure_Sourcing\Figures\Metadata\IOR_Run_Metadata_2009\\" + filename2)

# Set variable for iterator
iter = root.getiterator()
#Iterate through the tags in each XML file
for element in iter:
if element.tag == "timeinfo":
tree = root.find(".//timeinfo")
# Clear all tags below the "timeinfo" tag
tree.clear()
# Append new Element
element.append(ET.Element("mdattim"))
# Create SubElements to the parent tag
child1 = ET.SubElement(tree, "sngdate")
child2 = ET.SubElement(child1, "caldate")
child3 = ET.SubElement(child1, "time")
# Set text values for tags
child2.text = "08-24-2009"
child3.text = "unknown

关于python - 使用 Python 在 XML 中查找和替换标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6918794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com