def getXMLDescription(cliExecutable, **kwargs):
    """Call given cliExecutable with --xml and return xml ElementTree
    representation of standard output.

    Any kwargs are passed on to subprocess.Popen() (via popenCLIExecutable())."""

    command = [cliExecutable, '--xml']
    
    stdout, stdoutFilename = tempfile.mkstemp('.stdout')
    stderr, stderrFilename = tempfile.mkstemp('.stderr')
    try:
        p = popenCLIExecutable(command, stdout = stdout, stderr = stderr, **kwargs)
        ec = p.wait()
        with open(stderrFilename) as f:
            for line in f:
                logger.warning('%s: %s' % (os.path.basename(cliExecutable), line[:-1]))
        if ec:
            raise RuntimeError("Calling %s failed (exit code %d)" % (cliExecutable, ec))
        with open(stdoutFilename) as f:
            return ET.parse(f)
    finally:
        os.close(stdout)
        os.close(stderr)
        os.unlink(stdoutFilename)
        os.unlink(stderrFilename)