]> git.sesse.net Git - xml-template/blobdiff - python/xmltemplate.py
Update the PHP SWIG version to PHP 7, with various crash fixes, too.
[xml-template] / python / xmltemplate.py
index 19531496f7d08af8d76df86c515c63cb1dcfe337..434868703e1d014c36525b0feaab72ae087dea7f 100644 (file)
@@ -1,14 +1,21 @@
 #! /usr/bin/python
 import re
+import sys
 import xml.dom.minidom
 
+if sys.version_info[0] > 2:
+    string = str
+else:
+    string = basestring
+
+
 def process_file(filename, obj, clean = True):
        doc = xml.dom.minidom.parse(filename)
        process(doc, obj, clean)
        return doc
 
 def process(node, obj, clean = True):
-       if isinstance(obj, str):                        # overwrite
+       if isinstance(obj, string):                     # overwrite
                while not node.firstChild is None:
                        node.removeChild(node.firstChild)
                doc = _get_document_element(node)
@@ -35,8 +42,8 @@ def process(node, obj, clean = True):
                                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)
@@ -63,7 +70,7 @@ def process(node, obj, clean = True):
 
                        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
 
@@ -73,11 +80,12 @@ def process(node, obj, clean = True):
                        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
 
@@ -99,8 +107,9 @@ def process(node, obj, clean = True):
 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