constructTree

	constructTree: function (flatSiteinfo) {
		var siteinfo = {};

		for ( var k in flatSiteinfo ) {
			var pathes = k.split(/\./);
			var leaf = pathes.pop();
			var hash = pathes.reduce( function(stash, name) {
				return (stash[name] || (stash[name] = {}));
			}, siteinfo);
			hash[leaf] = flatSiteinfo[k];
		};
		return siteinfo;
	},

よくわかんないから firebug でやってみた。

var flatSiteinfo ={
    'subrequest.subrequest.permalink' : 'http://example.com/hoge',
    'subrequest.subrequest.paragraph' : '//div'
}
/*
var flatSiteinfo ={
    'subrequest.permalink' : 'http://example.com/hoge',
    'subrequest.paragraph' : '//div'
}
*/
var siteinfo={}
for ( var k in flatSiteinfo ) {

    var pathes = k.split(/\./);
    var leaf = pathes.pop();

    var hash = pathes.reduce( function(stash, name) {
        return (stash[name] || (stash[name] = {}));
    }, siteinfo)
    hash[leaf] = flatSiteinfo[k];
}


console.log(siteinfo)
//console.log(siteinfo.subrequest)
//console.log(siteinfo.subrequest.subrequest)
//console.log(siteinfo.subrequest.permalink)
//console.log(siteinfo.subrequest.paragraph)

http://gyazo.com/457cafbea075bd440dd8c401dd21baa1.png

var flatSiteinfo ={
    "permalink": "concat(\"..\/ASP\/ps_nendo_slct.asp?kanku_htm=s_index03.htm&hyouteizu_id=\",substring-after(.\/@href,\"hyouteizu_id=\"),\"&year=all\")",
    "subRequest.permalink": ".\/\/a\/@href",
    "paragraph": "\/\/map\/area",
    "url": "http:\/\/www4.kaiho.mlit.go.jp:8082\/Air_code\/INDEX\/s_index03.htm",
    "subRequest.paragraph": "\/\/td[.\/\/a[not(contains(@href,\"all\"))]]",
    "subRequest.subRequest.permalink": ".\/@href",
    "subRequest.subRequest.imageSource": "concat(\"..\/..\/Photo_gallery\/Light\/\",substring-before(substring-after(.\/@href,\"&year=\"),\"&photo_id\"),\"\/\",substring-before(substring-after(.\/@href,\"photo_id=\"),\".jpg\"),\"L.jpg\")",
    "subRequest.subRequest.paragraph": "\/\/span[starts-with(@id, \"p\")]\/map\/area",
    "subRequest.subRequest.caption": "substring-before(substring-after(.\/@href,\"photo_id=\"),\".jpg\")"
};
var siteinfo={};
for ( var k in flatSiteinfo ) {

    var pathes = k.split(/\./);
    var leaf = pathes.pop();

    var hash = pathes.reduce( function(stash, name) {
        return (stash[name] || (stash[name] = {}));
    }, siteinfo)
    hash[leaf] = flatSiteinfo[k];
}


console.log(siteinfo)
//console.log(siteinfo.subrequest)
//console.log(siteinfo.subrequest.subrequest)
//console.log(siteinfo.subrequest.permalink)
//console.log(siteinfo.subrequest.paragraph)


//console.log(siteinfo.permalink)

http://gyazo.com/0d5bc692f5c98ec0fa6c1fecbc3af1c1.png
http://gyazo.com/afe2de44408d046bd91aa09925421873.png