def METHOD_NAME( XMLfile, skipFunctionList, buildFuncLine ):
    tree = etree.parse(XMLfile)
    root = tree.getroot() # root == <doxygen>
    classNode = root[0]   # classNode == <compounddef>
    checkDoxygenVersion(root)
    functionStr = ''
    sectiondefNodes = classNode.xpath("//sectiondef[@kind='user-defined']")
    for sectiondefNode in sectiondefNodes:
        header = sectiondefNode.xpath("header//text()")
        if len(header) > 0: header = header[0]
        else: header = ''
        #description = sectiondefNode.xpath("description")[0].xpath("string()")
        ###publicFunctionNodes = classNode.xpath("//memberdef[@kind='function' and @prot='public']")
        publicFunctionNodes = sectiondefNode.xpath("memberdef[@kind='function' and @prot='public']")
        functionSubStr = ''
        for functionNode in publicFunctionNodes:
            # skip some functions
            name = functionNode.xpath('name')[0].text
            if name in skipFunctionList: continue
            # build the line for this function
            functionSubStr += buildFuncLine(functionNode)
        if functionSubStr != '':
            functionStr += "    //! @name " + header + "\n"
            functionStr += "    //@{\n\n"
            functionStr += functionSubStr
            functionStr += "    //@}\n\n"
    functionStr = functionStr.rstrip()
    return functionStr;