XML stuff

March 9, 2007

A (weird) way to convert PHP arrays to XML. I came up with this for Collective - passing media metadata (with getid3) from the server to JavaScript. It’s not supposed to work with numeric indexes - the algorithm doesn’t break, it just produces invalid XML (can’t have numbers as element names):

    function array2xml($array)
    {
      foreach ($array as $k => $v) {
        if (is_array($v)) {
          $out .= "<$k " . array2xml($v) . "</$k>\n";
        }
        else {
          $out .= "\n\t$k='$v'";
          if (is_array(next($array)) || (array_pop(array_keys($array)) == $k))
            $out .= ">\n";
            }
        }
      return $out;
    }

A way to convert a file system hierarchy into an XML document, in Python. This is for a simple file-cataloguer I desperately needed (more on this later, hopefully):

    imp = minidom.getDOMImplementation()
    ldoc = imp.createDocument(None, 'Library', None)

    def parsedir(dirname, parent = ldoc.documentElement):

      global ldoc

      if os.path.isdir(dirname):
        newDir = ldoc.createElement('Directory')
        newDir.setAttribute('path', dirname)
        parent.appendChild(newDir)
        parent = newDir

        for i in os.listdir(dirname):
          fp = os.path.join(dirname, i)
          if os.path.isdir(fp):
            parsedir(fp, newDir)

          else:
            newFile = ldoc.createElement('File')
            newFile.setAttribute('name', i)
            parent.appendChild(newFile)