我正在研究一种从XML文件中删除数字签名的方法。乍一看似乎很容易(删除元素-问题出在哪里?),但是lxml很难删除以“ ds”开头的元素,因为它无法将其识别为名称空间。我决定将XML文档转换为字符串变量,并使用re.sub()摆脱整个子字符串,以包括两个边界为开头和结尾。
不幸的是,尽管在我看来相同的代码在Find and remove a string starting and ending with a specific substring in python上运行良好,但似乎对我不起作用。
这是我的作品:
首先,我在SO上找到了经过调整的示例:
import re
s='dasdasdsafs<ds:Signature>[image : image name : image]vvfd gvdfvg </ds:Signature>elo dfvgd'
re.sub(r'\<ds:Signature>.*?</ds:Signature>','',s)
>>>>'dasdasdsafselo dfvgd'
然后,我的代码:
import re
file_in = open("filename.xml", 'r') #the input is pretty-printed XML file
tmp = file_in.read()
upd = re.sub(r'\<ds:Signature>.*?</ds:Signature>','',tmp)
print(upd)
令我沮丧的是,“ print(upd)”返回的值与“ print(tmp)”相同,包括整个“ ds:Signature”节点,而我当时期望Signature容器消失了。知道错误在哪里吗?