Mik*_*ike 5 python xml loops elementtree
我试图在一个特定目录中打开一个包含一系列XML的目录.
在下面的代码中,我正在遍历每个XML文档,我正在设置一些"if语句"来读取XML中的文本,查找关键字并替换它们,然后将新文件写入新位置.
运行脚本时出现以下错误:
Traceback info:
File "Z:\ESRI\Python\Test Scripts\ElementTree6.py", line 62, in <module>
if "%begdate%" in element.text:
...
Run Code Online (Sandbox Code Playgroud)
错误信息:
argument of type 'NoneType' is not iterable
Run Code Online (Sandbox Code Playgroud)
我已经将目录硬编码为一个特定的XML,当我运行if语句时,它们工作正常.
当我尝试设置迭代一系列我遇到错误的XML时.
我搜索了这个网站,看看我是否可以找到一个解决方案,但所有问题要么与我的不同,要么我不太了解解决方法.
我使用了许多打印行来测试输出.
一切正常,直到我到达if语句,然后出现错误.
# Location of XML's
folderPath = r"Z:\data"
# set variable to store files with extension ".xml"
for filename in glob.glob(os.path.join(folderPath, "*.xml")):
fullpath = os.path.join(folderPath, filename)
# find files and split the filename from the directory path
if os.path.isfile(fullpath):
basename, filename2 = os.path.split(fullpath)
#print "Basename = " + basename
#print "Filename = " + filename2
# set variable to store XML structure from xml file
root = ElementTree(file=r"Z:\data\\" + filename2)
#Create an iterator
iter = root.getiterator()
#Iterate
for element in iter:
#print element.text
if "%begdate%" in element.text:
BEGDATE = element.text.replace("%begdate%", BEGDATEPARAM)
element.text = BEGDATE
Run Code Online (Sandbox Code Playgroud)
Hoo*_*ons 19
您会发现xml文档中有许多元素不包含字符数据(即文本).关于python的一个好处是,在条件语句中,None是错误的,在知道条件语句如何短路意味着对你的问题有一个非常简单的解决方案时,更改行:
if "%begdate%" in element.text:
Run Code Online (Sandbox Code Playgroud)
至:
if element.text and "%begdate%" in element.text:
Run Code Online (Sandbox Code Playgroud)
当没有文本,然后element.text是无,又名假,然后你甚至不会得到有条件的,这是造成错误的部分.