That approuch I was trying, but I got always an error of undefined so I gave up.
ClassMethod test(array)
{
    SET value = ""
    FOR
    {
        SET value = $QUERY(@array)
        QUIT:value=""
        W value,"=",@array,!
    }
    QUIT
}
DO ##class(intranet.util.xml).test(.a)
<UNDEFINED>test+4^intranet.util.xml.1 *arrayHow this one can be turned into recursive?
I have no idea how to create programatically to check level deeper and deeper and so on.
ClassMethod array2xml(array) As %String
    {
        SET subscript = ""
        FOR
        {
            SET subscript = $ORDER(array(subscript))
            QUIT:subscript=""
            SET dataStatus = $DATA(array(subscript)),
                currentRef = array(subscript)
            write !, "Subscript=", subscript_", Value=", currentRef_" DataStatus: "_dataStatus
            IF (dataStatus > 9)
            {
                SET a = ""
                MERGE arr = array(subscript)
				// More subscripts, go deeperK 
				DO ..array2xml(.arr)
            }
            ELSEIF (dataStatus = 1)
            {
                // No more subscripts, just a value
            }
        }
    }Problem is that my output start repeating. Here is example array
SET array(1) = "1",
				array(1,1) = "1,1",
				array(1,1,1) = "1,1,1",
				array(1,1,2) = "1,1,2",
				array(1,1,3) = "1,1,3",
				array(1,1,1,1) = "1,1,1,1",
				array(2) = "2",
				array(2,1) = "2,1",
				array(2,1,1) = "2,1,1"And here are the output
Subscript=1 Value=1 DataStatus: 11
Subscript=1 Value=1,1 DataStatus: 11
Subscript=1 Value=1,1,1 DataStatus: 11
Subscript=1 Value=1,1,1,1 DataStatus: 1
Subscript=2 Value=1,1,2 DataStatus: 1
Subscript=3 Value=1,1,3 DataStatus: 1
Subscript=2 Value=2 DataStatus: 11
Subscript=1 Value=2,1 DataStatus: 11
Subscript=1 Value=2,1,1 DataStatus: 11
Subscript=1 Value=1,1,1,1 DataStatus: 1
Subscript=2 Value=1,1,2 DataStatus: 1
Subscript=3 Value=1,1,3 DataStatus: 1
I think I figgured out by adding KILL array(subscript) right after MERGE arr
Subscript=1 Value=1 DataStatus: 11
Subscript=1 Value=1,1 DataStatus: 11
Subscript=1 Value=1,1,1 DataStatus: 11
Subscript=1 Value=1,1,1,1 DataStatus: 1
Subscript=2 Value=1,1,2 DataStatus: 1
Subscript=3 Value=1,1,3 DataStatus: 1
Subscript=2 Value=2 DataStatus: 11
Subscript=1 Value=2,1 DataStatus: 11
Subscript=1 Value=2,1,1 DataStatus: 1
I dont know what Im missing here but its not work at all with $QUERY and @ indirection. Still is undefined even I converted local varaible into process private global.
Method setLayout(layout) As %Status { MERGE ^||layout = layout SET node = "" FOR { SET node = $QUERY(@^||layout) QUIT:node="" W node,"",@node,! } QUIT $$$OK }Obviously I was still trying to apply pattern from $ORDER . This one works.
SET node = $QUERY(^||layout("")) WHILE (node '= "") { W !, node SET node = $QUERY(@node) }