def Element(tag, attrib={}, *children, **extra): """ Element(tag (,attrdict)? (,subelement|string)* ) -> Element """ if isinstance(attrib, dict): attrib = attrib.copy() else: children = (attrib,) + children attrib = {} attrib.update(extra) element = basefactory(tag, attrib) prevelem = None for arg in children: if iselement(arg): element.append(arg) prevelem = arg else: if isinstance(arg, basestring): if prevelem is None: element.text = (element.text or '') + arg else: prevelem.tail = (prevelem.tail or '') + arg else: try: it = iter(arg) except: raise TypeError, "argument type to Element" for item in it: if not iselement(item): raise TypeError, "invalid argument type to Element" element.append(item) return element
def is_element_node(node, uri = None, name = None): if not iselement(node): return False if uri is None and name is None: return True element_uri, element_name = get_expanded_name(node) if uri != element_uri: return False return name is None or name == element_name
def is_node_set(x): return isinstance(x, (list, tuple)) or iselement(x)