return doc
def process(node, obj, clean = True):
- if isinstance(obj, str): # overwrite
+ if isinstance(obj, basestring): # overwrite
while not node.firstChild is None:
node.removeChild(node.firstChild)
doc = _get_document_element(node)
attrs_to_remove = []
if not attrs is None:
for i in range(attrs.length):
- attr = attrs.item(0)
- if attr.namespaceURI == "http://template.sesse.net/" or attr.name == "id":
+ attr = attrs.item(i)
+ if attr.namespaceURI == "http://template.sesse.net/" and attr.localName == "id":
id = attr.value
if clean:
attrs_to_remove.append(attr.name)
if not processed:
process(child, obj, clean)
- elif isinstance(obj, list): # repeat
+ elif hasattr(obj, '__iter__'): # repeat
doc = _get_document_element(node)
frag = doc.createElement("temporary-fragment") # ugh
frag.appendChild(child)
for instance in obj:
- newnode = frag.cloneNode(True)
- node.appendChild(newnode)
- process(newnode, instance, clean)
- if clean:
- _clean(newnode)
+ if instance is not None:
+ newnode = frag.cloneNode(True)
+ node.appendChild(newnode)
+ process(newnode, instance, clean)
+ if clean:
+ _clean(newnode)
# remove all the <fragment> tags
def alternate(tag, array, *elems):
i = 0
for ref in array:
- ref[tag] = elems[i % len(elems)]
- i = i + 1
+ if ref is not None:
+ ref[tag] = elems[i % len(elems)]
+ i = i + 1
return array