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)