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 *array
How 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) }