Template:Map2Xml

    Table of contents
    No headers
    var mMap = $Map ?? $mMap ?? __request.args["_Map"] ?? __request.args["_mMap"] ?? {};
    var nLog = $Log ?? $nLog ?? __request.args["_Log"] ?? __request.args["_nLog"] ?? 0;
    let sMap=String.Serialize(mMap); 
    var sType=String.SubStr(sMap,0,1);
    if (sType!="{")
        return;
    if (nLog) "mMap: "..Json.Format(mMap);
    if (nLog) { Web.Html("<br>");"> '"..sType.."'"; }
    var lMapTree=[];
    var nNodeId=0;
    var nParentId=0;
    var nLevel=0;
    var sKey="";
    var nInd=0;
    let lMapTree..=[{ id: nNodeId, parent: nParentId, level: nLevel, type: String.SubStr(sMap,0,1), key: "", val : mMap }];
    let nParentId=nNodeId;
    let nNodeId+=1;
    var nMapLevel1=1;
    var lInd=[];
    let lInd=Num.Series(0,#mMap-1);
    if (nLog) " #="..#mMap;
    foreach (var nInd1 in lInd)
    //foreach (var sKey1 in Map.Keys(mMap))
    {   
        let nInd=nInd1;    
        let sKey=Map.Keys(mMap)[nInd];
        var sKey1=sKey;
        var vMap1=mMap[sKey];
        //var vMap1=mMap[sKey1];
        let vMap=vMap1;
        //let sKey=sKey1;
        let sMap=String.Serialize(vMap); 
        let sType=String.SubStr(sMap,0,1);
        if (sType=="{")
        {
            let sKey=Map.Keys(vMap)[nInd];    
        }
        else
            let sKey="";            
        let nLevel=1;
        if (nLog) { Web.Html("<br>");">> #"..nInd.." '"..sType.."': "..sKey..": "..Json.Emit(sMap); }
        let lMapTree..=[{ id: nNodeId, parent: nParentId, level: nLevel, maplev: nMapLevel1, type: sType, key: sKey1, val : vMap }];
        let nNodeId+=1;
        if (List.Contains(["{","["],sType))
        {
            var nMapLevel2=((sType=="{") ? nMapLevel1+1 : nMapLevel1);            
            var nParentId2=nNodeId-1;
            var sType2=sType;
            let lInd=Num.Series(0,#vMap-1);
            if (nLog) " #="..#vMap;
            foreach (var nInd2 in lInd)
            {   
                let nInd=nInd2;
                if (sType2=="{")
                {
                    let vMap=Map.Values(vMap1)[nInd];
                    let sKey=Map.Keys(vMap1)[nInd];
                }//if
                else
                {
                    let vMap=vMap1[nInd];
                    let sKey="#"..nInd;
                }//el
                var vMap2=vMap;
                var sKey2=sKey;
                let sMap=String.Serialize(vMap); 
                let sType=String.SubStr(sMap,0,1);
                //if (sType=="{")
                //    let sKey=Map.Keys(vMap)[nInd];
                //else
                //    let sKey2="";            
                let nLevel=2;
                if (nLog) { Web.Html("<br>");">>> #"..nInd.." '"..sType.."': "..sKey..": "..Json.Emit(sMap); }
                let lMapTree..=[{ id: nNodeId, parent: nParentId2, level: nLevel, maplev: nMapLevel2, type: sType, key: sKey2, val : vMap }];
                let nNodeId+=1;
                if (List.Contains(["{","["],sType))
                {
                    var nMapLevel3=((sType=="{") ? nMapLevel2+1 : nMapLevel2);
                    var nParentId3=nNodeId-1;
                    var sType3=sType;
                    let lInd=Num.Series(0,#vMap-1);
                    if (nLog) " #="..#vMap;
                    foreach (var nInd3 in lInd)
                    {   
                        let nInd=nInd3;
                        if (sType3=="{")
                        {
                            let vMap=Map.Values(vMap2)[nInd];
                            let sKey=Map.Keys(vMap2)[nInd];
                        }//if
                        else
                        {
                            let vMap=vMap2[nInd];
                            let sKey="#"..nInd;
                        }//el
                        var vMap3=vMap;
                        var sKey3=sKey;
                        let sMap=String.Serialize(vMap3); 
                        let sType=String.SubStr(sMap,0,1);
                        let nLevel=3;
                        if (nLog) { Web.Html("<br>");">>>> #"..nInd.." '"..sType.."': "..sKey..": "..Json.Emit(sMap); }
                        let lMapTree..=[{ id: nNodeId, parent: nParentId3, level: nLevel, maplev: nMapLevel3, type: sType, key: sKey3, val : vMap }];
                        let nNodeId+=1;
                        if (List.Contains(["{","["],sType))
                        {
                            var nMapLevel4=((sType=="{") ? nMapLevel3+1 : nMapLevel3);
                            var nParentId4=nNodeId-1;
                            var sType4=sType;
                            let lInd=Num.Series(0,#vMap-1);
                            if (nLog) " #="..#vMap;
                            foreach (var nInd4 in lInd)
                            {   
                                let nInd=nInd4;
                                if (sType4=="{")
                                {
                                    let vMap=Map.Values(vMap3)[nInd];
                                    let sKey=Map.Keys(vMap3)[nInd];
                                }//if
                                else
                                {
                                    let vMap=vMap3[nInd];
                                    let sKey="#"..nInd;
                                }//el
                                var vMap4=vMap;
                                var sKey4=sKey;
                                let sMap=String.Serialize(vMap4); 
                                let sType=String.SubStr(sMap,0,1);
                                let nLevel=4;
                                if (nLog) { Web.Html("<br>");">>>>> #"..nInd.." '"..sType.."': "..sKey..": "..Json.Emit(sMap); }
                                let lMapTree..=[{ id: nNodeId, parent: nParentId4, level: nLevel, maplev: nMapLevel4, type: sType, key: sKey4, val : vMap }];
                                let nNodeId+=1;
                                if (List.Contains(["{","["],sType))
                                {
                                    var nMapLevel5=((sType=="{") ? nMapLevel4+1 : nMapLevel4);
                                    var nParentId5=nNodeId-1;
                                    var sType5=sType;
                                    let lInd=Num.Series(0,#vMap-1);
                                    if (nLog) " #="..#vMap;
                                    foreach (var nInd5 in lInd)
                                    {   
                                        let nInd=nInd5;
                                        if (sType5=="{")
                                        {
                                            let vMap=Map.Values(vMap4)[nInd];
                                            let sKey=Map.Keys(vMap4)[nInd];
                                        }//if
                                        else
                                        {
                                            let vMap=vMap4[nInd];
                                            let sKey="#"..nInd;
                                        }//el
                                        var vMap5=vMap;
                                        var sKey5=sKey;
                                        let sMap=String.Serialize(vMap5); 
                                        let sType=String.SubStr(sMap,0,1);
                                        let nLevel=5;
                                        if (nLog) {  Web.Html("<br>");">>>>>> #"..nInd.." '"..sType.."': "..sKey..": "..Json.Emit(sMap); }
                                        let lMapTree..=[{ id: nNodeId, parent: nParentId5, level: nLevel, maplev: nMapLevel5, type: sType, key: sKey5, val : vMap }];
                                        let nNodeId+=1;
                                        if (List.Contains(["{","["],sType))
                                        {
                                            var nMapLevel6=((sType=="{") ? nMapLevel5+1 : nMapLevel5);
                                            var nParentId6=nNodeId-1;
                                            var sType6=sType;
                                            let lInd=Num.Series(0,#vMap-1);
                                            if (nLog) " #="..#vMap;
                                            foreach (var nInd6 in lInd)
                                            {   
                                                let nInd=nInd6;
                                                if (sType6=="{")
                                                {
                                                    let vMap=Map.Values(vMap5)[nInd];
                                                    let sKey=Map.Keys(vMap5)[nInd];
                                                }//if
                                                else
                                                {
                                                    let vMap=vMap5[nInd];
                                                    let sKey="#"..nInd;
                                                }//el
                                                var vMap6=vMap;
                                                var sKey6=sKey;
                                                let sMap=String.Serialize(vMap6); 
                                                let sType=String.SubStr(sMap,0,1);
                                                let nLevel=6;
                                                if (nLog) {  Web.Html("<br>");">>>>>> #"..nInd.." '"..sType.."': "..sKey..": "..Json.Emit(sMap); }
                                                let lMapTree..=[{ id: nNodeId, parent: nParentId6, level: nLevel, maplev: nMapLevel6, type: sType, key: sKey6, val : vMap }];
                                                let nNodeId+=1;
                                                if (List.Contains(["{","["],sType))
                                                {
                                                    var nMapLevel7=((sType=="{") ? nMapLevel6+1 : nMapLevel6);
                                                    var nParentId7=nNodeId-1;
                                                    var sType7=sType;
                                                    let lInd=Num.Series(0,#vMap-1);
                                                    if (nLog) " #="..#vMap;
                                                }//if                            
                                            }//fe6
                                        }//if                            
                                    }//fe5
                                }//if
                            }//fe4
                        }//if
                    }//fe3
                }//if                        
            }//fe2
        }//if
    }//fe1
    if (nLog) { Web.Html("<br>");"lMapTree: "..Json.Format(lMapTree); }
    
    if (nLog)
    {
        foreach (var mMapNode in lMapTree)
        {
            //Read Node Properties
            var nNodeId=mMapNode["id"];
            var nParentId=mMapNode["parent"];
            var nLevel=mMapNode["level"];
            var nMapLevel=mMapNode["maplev"];
            var sType=mMapNode["type"];
            var sKey=mMapNode["key"];
            var vVal=mMapNode["val"];
    
            Web.Html("<br>");"Id: "..nNodeId.." Parent: "..nParentId.." Level: "..nLevel.." MapLev: "..nMapLevel.." Type: "..sType.." Key: "..sKey.." Val: "..Json.Emit(vVal);
        }//fe
        Web.Html("<br>");
    }//if
    
    foreach (var mMapNode in lMapTree)
    {
        //Read Node Properties
        var nNodeId=mMapNode["id"];
        var nParentId=mMapNode["parent"];
        var nLevel=mMapNode["level"];
        var nMapLevel=mMapNode["maplev"];
        var sType=mMapNode["type"];
        var sKey=mMapNode["key"];
        var vVal=mMapNode["val"];
    
        //if (nLog) { Web.Html("<br>");"Id: "..nNodeId.." Parent: "..nParentId.." Level: "..nLevel.." MapLev: "..nMapLevel.." Type: "..sType.." Key: "..sKey.." Val: "..Json.Emit(vVal); }
    
        //Locate Parent Node
        var sListCond="String.IndexOf(Json.Emit($),'\"id\": "..nParentId.."')>0";
        //var sMapCond="($.key=='parent')&&($.value=="..nParentId..")";
        //var sListCond="Map.Select($,"..sMapCond..")";
        var mParent=List.Select(lMapTree,sListCond)[0];
        
        //Process
        if (sKey=="#0")
        {
            if (mParent!=nil)
            {
                if (mParent["type"]=="[")
                {
                    //Get List of Properties, Node's Childs
                    var sListCond="String.IndexOf(Json.Emit($),'\"parent\": "..nNodeId.."')>0";
                    var lChilds=List.Select(lMapTree,sListCond);                
                    foreach (var mChild in lChilds)
                    {
                        //Get Property's Key & Value
                        " "..mChild["key"].."=\""..mChild["val"].."\"";
                    }//fe
                    //" TagProp: "..Json.Emit(vVal);
                }//if
                ">";
            }//if
        }//if
    
        var bDoCloseTags=false;
        if ((sKey!="")&&(sKey[0]!="#")&&(mParent["key"]!="#0"))  //&&(List.Contains(["{","["],sType))
        {
            //" id:"..nNodeId.." key:"..sKey.." type: "..sType;
            //Set tabulation
            Web.Html("<br>");
            foreach (var nRep in Num.Series(0,nMapLevel-2,1))
                Web.Html("&nbsp;&nbsp;&nbsp;&nbsp;"); //4 x &nbsp;
    
            "<"..sKey;
            if (sType!="[")
                ">";
    
            if (!List.Contains(["{","["],sType))
            {
                vVal.."</"..sKey..">";
            }//if
    
            let bDoCloseTags=true;
    
        }//if
    
        let bDoCloseTags=(bDoCloseTags)||(__index+1==#lMapTree); //on the last record
    
        if (bDoCloseTags)
        {
            //Get Following's MapLevel
            var nFolMapLev=((__index+1<#lMapTree)? lMapTree[__index+1]["maplev"] : 0);
            //" L:"..nFolMapLev;
            //Close Parent Tags
            var nFollowId=0;
            foreach (var nClose in Num.Series(nMapLevel-1,nFolMapLev,-1))
            {
                var mFollow={};
                if (__index==0)
                    let mFollow=mParent;
                else
                {
                    //Locate Parent's Parent Node
                    var sListCond="String.IndexOf(Json.Emit($),'\"id\": "..nFollowId.."')>0";
                    var lFollow=List.Select(lMapTree,sListCond);
                    let mFollow=lFollow[0];
                    if (mFollow["key"]=="#1") //Tag with properties
                    {
                        let nFollowId=mFollow["parent"];
                        let sListCond="String.IndexOf(Json.Emit($),'\"id\": "..nFollowId.."')>0";
                        let lFollow=List.Select(lMapTree,sListCond);
                        let mFollow=lFollow[0];
                    }//if
                    //" F:"..nFollowId.." L#="..#lFollow;
                }//else
                var sCloseTag=mFollow["key"];
                let nFollowId=mFollow["parent"];
                if (sCloseTag!="")
                {
                    Web.Html("<br>");
                    foreach (var nRep in Num.Series(0,nClose-2,1))
                        Web.Html("&nbsp;&nbsp;&nbsp;&nbsp;"); //4 x &nbsp;
                    "</"..sCloseTag..">";
                }//if
            }//fe
        }//if : DoCloseTags
    
    }//fe
    
    
    
    Tag page (Edit tags)
    • No tags
    Page statistics
    1121 view(s), 193 edit(s) and 16255 character(s)

    Comments

    You must login to post a comment.

    Attach file

    Attachments