使用python搜索并替换xml/text文件中的多行

2024-10-02 00:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

---更新3: 我已经完成了将所需数据更新到xml文件中的脚本,但是下面的代码将从写入的文件中删除。为什么会这样?我怎样才能更换它?在

<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='ANZMeta.xsl'?>

现行工作规范(上述问题除外)。在

^{pr2}$

---更新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>中不是唯一的,我们可以根据来自

FileDesc_obj.spatialReference.name

u'GCS_GDA_1994'

---原帖---

我正在建立一个程序来从我们库中的空间文件生成xml元数据文件。我已经创建了从文件中提取所需的空间和属性数据的脚本,并创建了基于shp和文本文件的文件索引,但现在我想将此信息写入到基本元数据xml文件中,该文件通过替换公共/静态元素保存的值写入anzlic标准。。。在

例如,我想替换下面的xml代码

<northbc>8097970</northbc>
<southbc>8078568</southbc>

<northbc> GeneratedValue_[desc.extent.XMax] /<northbc>
<southbc> GeneratedValue_[desc.extent.XMax] </southbc>

问题是,和之间的数字/值显然不一样。在

类似于<title>, <nondig><formname>等xml标记,在后一个示例中,必须同时搜索两个标记,因为formname多次出现(不是唯一的)。在

我使用的是Python正则表达式手册[here][1]


Tags: 文件textinnodetreeobjforxml
3条回答

如果处理的是有效的XML,那么使用XPath查找感兴趣的节点,使用elementtreeapi来操作节点。在

例如,您的xpath可能是“//northbc”,您只需替换其中的文本节点。在

请参见http://docs.python.org/library/xml.etree.elementtree.htmlhttp://pypi.python.org/pypi/lxml/2.2.8,了解两个不同的库,它们将帮助您完成这项工作。在google上搜索XPath,并查看w3c教程以获得一个不错的XPath简介(我显然不能在一篇文章中发布超过两个链接,否则我也会链接它)

使用上面给定的标签:

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节点。您可以根据需要轻松地定制代码。在

我可能在这里说的很明显,但是您考虑过使用DOM树来解析和操作XML吗?在

相关问题 更多 >

    热门问题