编辑目录中的XML文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编辑目录中的XML文件相关的知识,希望对你有一定的参考价值。

我正在尝试使用python脚本编辑文件夹的不同目录中的多个config.xml文件。我正在寻找特定的标签值,然后用新值更改它。

我创建了一个数组,并使用ElementTree api。

import os
import xml.etree.ElementTree as ET

d1 = r'/home/user/temp/a/'
d2 = r'/home/user/temp/b/'
d3 = r'/home/user/temp/c/' 
d4 = r'/home/user/temp/d/'
d5 = r'/home/user/temp/f/'

data = [d1, d2, d3, d4, d5]

for dir in data:

    tree = ET.ElementTree(os.path.join(dir + 'config.xml'))
    root = tree.getroot()

    for Element in tree.iter(tag='url'):
        print(Element.text)
        Element.text = str("new value")
        tree.write('config.xml')

这是我试图修改的xml

 <?xml version='1.0' encoding='UTF-8'?>
  <scm class="hudson.plugins.git.GitSCM" plugin="git@2.4.2">
    <configVersion>2</configVersion>
     <userRemoteConfigs>
      <hudson.plugins.git.UserRemoteConfig>
        <url>happy changes</url>
       </hudson.plugins.git.UserRemoteConfig>
    </userRemoteConfigs>
     <branches>
       <hudson.plugins.git.BranchSpec>
         <name>refactor</name>
     </hudson.plugins.git.BranchSpec>
    </branches>
<doGenerateSubmoduleConfigurations>false
</doGenerateSubmoduleConfigurations>
    <submoduleCfg class="list"/>
    <extensions>
      <hudson.plugins.git.extensions.impl.PerBuildTag/>
    </extensions>
  </scm>

这是错误信息

for Element in tree.iter(tag='url'):
  File "/usr/lib/python3.6/xml/etree/ElementTree.py", line 620, in 
  iter
  return self._root.iter(tag)
 AttributeError: 'str' object has no attribute 'iter'
答案

您是否忘记在.write()调用中提供完整路径名?像这样:

tree.write(os.path.join(dir + 'config.xml'))

否则,所有config.xml文件都将被写入当前工作目录。

另一答案

ElementTree期望将Element对象作为参数,而不是具有XML源代码的文件名。您需要使用ElementTree API的parse()函数解析文件。

您需要完整路径+文件名来编写结果文件,并实际使用os.path.join()来连接路径和文件名。

#!/usr/bin/env python3
import os
import xml.etree.ElementTree as ET


def main():
    path_names = [
        '/home/user/temp/a',
        '/home/user/temp/b',
        '/home/user/temp/c',
        '/home/user/temp/d',
        '/home/user/temp/e',
    ]
    for path in path_names:
        filename = os.path.join(path, 'config.xml')
        tree = ET.parse(filename)
        for element in tree.iter('url'):
            print(element.text)
            element.text = 'new value'
        tree.write(filename)


if __name__ == '__main__':
    main()

以上是关于编辑目录中的XML文件的主要内容,如果未能解决你的问题,请参考以下文章

编辑目录中的XML文件

什么是工具:片段 xml 文件中的布局?

二进制 XML 文件第 13 行:膨胀类片段时出错

在扩充XML文件之后,不会调用onCreate()

Eclipse 中的通用代码片段或模板

VSCode自定义代码片段——JS中的面向对象编程