Самый эффективный способ использовать SAX или подобный парсер. Например, Python с экспатом, который распространяется с Python:
#-------------------------------------------------------------------------------
# Author: nad2000 AT google DOT com
#
# Saple demonstrating how to trasform:
#
# <doc>
# <a1>11111</a1>
# <b1>22222</b1>
# <c1>33333</c1>
# </doc>
#
# into:
#
# <doc2>
# <f1>11111</f1>
# <f2>33333</f2>
# </doc2>
#-------------------------------------------------------------------------------
#!/usr/bin/env python
from xml.parsers import expat
class DocParser:
def __init__(self):
self._parser = expat.ParserCreate()
self._parser.StartElementHandler = self.start
self._parser.EndElementHandler = self.end
self._parser.CharacterDataHandler = self.data
def feedFile(self, fileName):
file= open( fileName, mode='rb')
self._parser.ParseFile( file)
file.close()
def close(self):
del self._parser # get rid of circular references
def start(self, tag, attrs):
if tag == 'doc':
print ('<?xml version="1.0" encoding="UTF-8"?>')
print ("<doc2>")
def end(self, tag):
if tag == 'a1':
print ("\t<f1>%s</f1>" % self._data)
elif tag == 'c1':
print ("\t<f2>%s</f2>" % self._data)
elif tag == 'doc':
print ("</doc2>")
def data(self, data):
self._data = data
def main():
p = DocParser()
p.feedFile( "sample.xml")
p.close()
pass
if __name__ == '__main__':
main()