编辑目录中的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文件的主要内容,如果未能解决你的问题,请参考以下文章