Python 使用cElementTree解析错误无效字符
我正在尝试使用以下方法,以迭代方式解析一棵树,并在末尾使用校验和:Python 使用cElementTree解析错误无效字符,python,xml,xml-parsing,Python,Xml,Xml Parsing,我正在尝试使用以下方法,以迭代方式解析一棵树,并在末尾使用校验和: import xml.etree.cElementTree as et for event, elem in et.iterparse("C:\myXMLfile.xml"): if elem.tag == "Signature": elem.clear() 这会引发一个ParseError:reference to invalid character number:第4205行第25列此字符:查看,您
import xml.etree.cElementTree as et
for event, elem in et.iterparse("C:\myXMLfile.xml"):
if elem.tag == "Signature":
elem.clear()
这会引发一个
ParseError:reference to invalid character number:第4205行第25列此字符:查看,您会注意到有一个可选的事件参数,您可以在其中报告“开始”事件(“默认情况下结束”事件)。您可以利用它在开始事件后执行elem.clear(),并继续以双分支if
语句的形式结束事件。以下是我最后要做的:
将XML文件作为文本读入内存
使用正则表达式查找标记
删除开始标记和结束标记之间的所有内容
重写为XML文件
解析新的XML文件
快走吧
我已经更改了代码,现在是:对于event,elem in et.iterparse(“C:\myXMLfile.xml”):如果event==“start”和elem.tag==“Signature”:elem.clear()
不幸的是,这会产生相同的结果。我能想到的唯一选择是,我脑子里想的就是迭代并删除Signature
标记,然后执行iterparse。这将对性能造成微不足道的影响,因为它仍然处于相同的顺序。我明白你的意思。我不知道在这种情况下如何实现这一点;显然,“开始”事件查找开始标记的结束“>”。至于删除签名
标记,我认为这是我必须要做的,尽管除了逐行写入文件外,我也不知道如何最好地完成。使用这样的过程如何:tree=xml.parse(“C:\myXMLfile.xml”)
。然后抓住根rootNode=tree.getroot()
,并使用findall(“签名”)获取带有签名标记的元素。不幸的是,解析器在将签名标记加载到内存时抛出错误。我想我可以尝试使用RE删除签名行,然后将所有内容加载到内存中。