Appending Elements in Element Tree
Ron Adam
rrr at ronadam.com
Sat Apr 8 03:48:13 EDT 2006
Ron Adam wrote:
>
> In my program I have a lot of statements that append elements, but
> sometimes I don't want to append the element so it requres an if
> statement to check it, and that requires assigning the returned element
> from a function to a name or calling the funtion twice.
>
> e = ET.Element('name')
> e.append(get_subelement(obj)) # but raises an exception on None
>
>
>
> This works, but I have a lot of appends.
>
> sube = get_element(obj)
> if sube is None:
> e.append(sube)
>
>
>
> Now if Elements worked more like lists I could extend an element.
>
> alist = []
> alist.extend([]) # returns orginal list
>
>
>
> With strings.
>
> s = ''
> s += '' # returns original string (or copy)
>
>
> So is there an identity operation with Element Tree elements that I can
> use to avoid putting a lot of if and or try statements around appending
> elements?
>
>
>
> I could wrap the append and do it this way...
>
> def eappend(e1, e2):
> if e2 is None: return e1
> e1.append(e2)
> return e1
>
> Then do...
>
> e = eappend(e, get_element(obj)) # Append if not None.
>
>
> But maybe there's a better way?
The following worked in cases where I needed to append a list of items.
def extend(e1, elist):
for e in elist:
e1.append(e)
return e1
Although I still need to return the list as elements aren't mutable.
element = extend(element, elist)
It would be nice if this was built in so I could do... Hint hint. :-)
element.extend(elist)
Where elist is a list of elements or an element with a number of sub
elements.
I still need to special case individual appends or put the returned item
in a list so I use the extend() function on the returned element.
I guess I need to look at the Element Tree source code.
Cheers,
Ron
More information about the Python-list
mailing list