Adding an XML fragment as a child node in a pre-existing Element tree

2007-02-11 Thread Rajarshi
Hi, I'm using ElementTree for some RSS processing. The point where I
face a problem is that within an  I need to add another
child node (in addition to  etc) which is a well-formed XML
document (Chemical Markup Language to be precise).

So my code looks like:

import cElementTree as ET

c = open('x.cml').readlines()
c = string.join(c)
cml = ET.XML(c)

Now I also have the following code:

def addItem(self, title, link, description, cml = None):
RSSitem = ET.SubElement ( self.RSSchannel, 'item' )

ET.SubElement( RSSitem, 'title' ).text = title
ET.SubElement( RSSitem, 'description' ).text = description

What I'm confused is how I can add the cml Element object that I
generated, to the RSSitem as a child node.

Do I need to manually traverse the tree of the CML document and add it
one by one to the RSSitem as a child node? Or is there a smarter way
to do this?

Any pointers would be greatly appreciated
Thanks,

Rajarshi

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Adding an XML fragment as a child node in a pre-existing Element tree

2007-02-11 Thread Gabriel Genellina
En Sun, 11 Feb 2007 15:15:21 -0300, Rajarshi <[EMAIL PROTECTED]>  
escribió:

> Hi, I'm using ElementTree for some RSS processing. The point where I
> face a problem is that within an  I need to add another
> child node (in addition to  etc) which is a well-formed XML
> document (Chemical Markup Language to be precise).
>
> So my code looks like:
>
> import cElementTree as ET
>
> c = open('x.cml').readlines()
> c = string.join(c)
> cml = ET.XML(c)

All the above thing can be replaced by:
cml = ET.parse("x.cml")

>
> Now I also have the following code:
>
> def addItem(self, title, link, description, cml = None):
> RSSitem = ET.SubElement ( self.RSSchannel, 'item' )
>
> ET.SubElement( RSSitem, 'title' ).text = title
> ET.SubElement( RSSitem, 'description' ).text = description
>
> What I'm confused is how I can add the cml Element object that I
> generated, to the RSSitem as a child node.

SubElement is just a convenience function for creating a new element and  
appending it to an existing parent element. As you already have the new  
subelement, just use append:

RSSitem.append(cml)

See the documentation at http://www.effbot.org/zone/element-index.htm

-- 
Gabriel Genellina

-- 
http://mail.python.org/mailman/listinfo/python-list