Parsing XML data to be put onto a site with jQuery
Don't use selector all the time. DOM locating waste most resource and time. as less selector as possible. use variable cache the jQuery object.

Data is look like a root: 

var $data = $("Data");


Rather than parse start with "category_number", why not start with "Category"

$(xml).find('Category').each(function(){
    //do something.
});


Also, you could use filter() or map() to reduce the code:

// filter() example
function getSubCategory(pid){
    $catalist = $data.find("Category").filter(function(){
       return $(this).find("parent_number").text()==pid;
    })

    return $catalist;

}

// map() example
var subCatString=$subCatList.map(function(sum,item){
    var $subCat=$(item) ;
    var vcum=$subCat.find("category_number").text();
    return '&lt;li&gt;'+vcum+'&lt;/li&gt;'
}).get().join();


Combine them together (HTML, see this JSFiddle, don't use AJAX): 

var $xml= $("xml");
var $data=$xml.find("Data");
var $displayList=$("ul#category_list");


$xml.find("Category").each(function(){
    var $catageory=$(this);
    var $cnum=$catageory.find("category_number");
    var $pnum=$catageory.find("parent_number");
    var $cname=$catageory.find("category_name"); 

    var $subCatList=getSubCategory($cnum.text());
    var subCatString=$subCatList.map(function(sum,item){
        var $subCat=$(item) ;
        var vcum=$subCat.find("category_number").text();
        return '&lt;li&gt;'+vcum+'&lt;/li&gt;'
    }).get().join();


    var $ul=$("&lt;ul/&gt;",{class:$cnum.text()});

    $ul.append(subCatString);

    $displayList.append($("&lt;li/&gt;").html($ul));



});


function getSubCategory(pid){
    $catalist = $data.find("Category").filter(function(){
       return $(this).find("parent_number").text()==pid;
    })

    return $catalist;

}