Tony McDonald wrote: > (biblioentry can be repeated). That is, the original <para > role="book">EMED123</para> should be totally replaced by the > biblioentry element(s). > > The code EMED123 is used as a key into a database to look up the book > entries. We then generate biblioentry(s) from it. That works fine, > and I'm creating Elements from that happily. > > What I *cannot* get right is the replacement. I've tried append but > that seems to work so; > > xml = """<?xml version="1.0"?> > <doc> > <begin>start</begin> > <replaceme>with something else</replaceme> > <end>finish</end> > </doc> > """ > root = XML(xml) > new = Element("new") > new.text = "Hi" > elements = root.getiterator() > for element in elements: > if element.tag == 'replaceme': > element.append(new) > dump(root) > > Produces this; > <doc> > <begin>start</begin> > <replaceme arg="EMED">with something else derived from <new>Hi</new></ > replaceme> > <end>finish</end> > </doc>
how about: xml = """<?xml version="1.0"?> <doc> <begin>start</begin> <replaceme>with something else</replaceme> <end>finish</end> </doc> """ root = XML(xml) new = Element("new") new.text = "Hi" new.tail = "\n" for index, element in enumerate(root): if element.tag == 'replaceme': root[index] = new dump(root) this prints <doc> <begin>start</begin> <new>Hi</new> <end>finish</end> </doc> to do this recursively, you can either put the code in a function that calls itself, or you can simply add an extra loop: for parent in root.getiterator(): for index, element in enumerate(parent): if element.tag == 'replaceme': parent[index] = new hope this helps! </F> _______________________________________________ XML-SIG maillist - XML-SIG@python.org http://mail.python.org/mailman/listinfo/xml-sig