您可以使用
xml.sax.saxutils.XMLFilterbase实现来过滤掉project1节点。
您可以使用而不是自己组装xml字符串
xml.sax.saxutils.XMLGenerator。
以下是Python3代码,
super如果需要Python2 ,请进行调整。
from xml.sax import make_parserfrom xml.sax.saxutils import XMLFilterbase, XMLGeneratorclass Project1Filter(XMLFilterbase): """This decides which SAX events to forward to the ContentHandler We will not forward events when we are inside any elements with a name specified in the 'tags_names_to_exclude' parameter """ def __init__(self, tag_names_to_exclude, parent=None): super().__init__(parent) # set of tag names to exclude self._tag_names_to_exclude = tag_names_to_exclude # _project_1_count keeps track of opened project1 elements self._project_1_count = 0 def _forward_events(self): # will return True when we are not inside a project1 element return self._project_1_count == 0 def startElement(self, name, attrs): if name in self._tag_names_to_exclude: self._project_1_count += 1 if self._forward_events(): super().startElement(name, attrs) def endElement(self, name): if self._forward_events(): super().endElement(name) if name in self._tag_names_to_exclude: self._project_1_count -= 1 def characters(self, content): if self._forward_events(): super().characters(content) # override other content handler methods on XMLFilterbase as neccessarydef main(): tag_names_to_exclude = {'project1', 'project2', 'project3'} reader = Project1Filter(tag_names_to_exclude, make_parser()) with open('out-small.xml', 'w') as f: handler = XMLGenerator(f) reader.setContentHandler(handler) reader.parse('input.xml')if __name__ == "__main__": main()


