我有一个包含以下行的xml文件:
<CREATION_DATE>2009-12-20T10:47:07.000Z</CREATION_DATE>
我想用以下内容替换:
<CREATION_DATE>XXX</CREATION_DATE>
认为在我应该修改的python脚本中使用re
模块非常简单。我做了类似的事情:
if '</CREATION_DATE>' in ligne:
out_lines[i] = re.sub(r'(^.*<CREATION_DATE>).*(</CREATION_DATE>.*$)', r'\1XXX\2', ligne)
具有日期的字段已正确替换,但在此过程中将丢失尾随的新行和缩进。我尝试将ligne
和sub
函数的结果转换为带有.encode('string-escape')
的原始字符串,但没有成功。我是python中的菜鸟,但我对正则表达式有点习惯,我真的看不出它是错的。
答案 0 :(得分:2)
另一种更简单且更可靠的替换XML元素文本的方法是使用 XML解析器。甚至有one in the Python Standard Library:
>>> import xml.etree.ElementTree as ET
>>>
>>> s = '<ROOT><CREATION_DATE>2009-12-20T10:47:07.000Z</CREATION_DATE></ROOT>'
>>> root = ET.fromstring(s)
>>> root.find("CREATION_DATE").text = 'XXX'
>>> ET.tostring(root)
'<ROOT><CREATION_DATE>XXX</CREATION_DATE></ROOT>'
答案 1 :(得分:0)
正如评论中所述,变量ligne
在代码中的其他地方被删除了空格和ligne = ligne.strip()
的新行...我没有删除我的问题,因为alecxe对xml模块的回答是非常有用。