To demonstrate macros in the XML, we'll show XML with macro definitions and XML with the macros expanded. We'll also show the XML with macros as a property = value output, which may be easier on the eyes;
A macro is identified by a prefix "${" and suffix "}" with the string values between being the macro name. The macro name must exist in the XML file at a point above the macro's use. Macros expand as either values (a string) or they will expand as an element (object).
In the example, note the following value expansions:
<a_configs>
<foo>topfoo</foo>
<bar>topbar</bar>
<foo_bar>the ${foo}${bar} value</foo_bar>
<lkup_outer_inner_value>the outer inner value</lkup_outer_inner_value>
<nested_outer>outer</nested_outer>
<nested_inner>inner</nested_inner>
<nested_join_result>${lkup_${nested_outer}_${nested_inner}_value}</nested_join_result>
<lkup_a_obj>
<aa>aa value</aa>
<bb>bb value</bb>
</lkup_a_obj>
<obj_lkup>${lkup_a_obj}</obj_lkup>
<lkup_aa_obj>
<foo>foo</foo>
<bar>bar</bar>
<foo_bar>the ${foo}${bar} value</foo_bar>
</lkup_aa_obj>
<obj_aalkup>${lkup_aa_obj}</obj_aalkup>
<deep>
<deeper>
<deep_aalkup>${lkup_aa_obj}</deep_aalkup>
</deeper>
</deep>
</a_configs>
a_configs = {
foo = topfoo;
bar = topbar;
foo_bar = the ${foo}${bar} value;
lkup_outer_inner_value = the outer inner value;
nested_outer = outer;
nested_inner = inner;
nested_join_result = ${lkup_${nested_outer}_${nested_inner}_value};
lkup_a_obj = {
aa = aa value;
bb = bb value;
};
obj_lkup = ${lkup_a_obj};
lkup_aa_obj = {
foo = foo;
bar = bar;
foo_bar = the ${foo}${bar} value;
};
obj_aalkup = ${lkup_aa_obj};
deep = {
deeper = {
deep_aalkup = ${lkup_aa_obj};
};
};
};
<a_configs>
<foo>topfoo</foo>
<bar>topbar</bar>
<foo_bar>the topfootopbar value</foo_bar>
<lkup_outer_inner_value>the outer inner value</lkup_outer_inner_value>
<nested_outer>outer</nested_outer>
<nested_inner>inner</nested_inner>
<nested_join_result>the outer inner value</nested_join_result>
<lkup_a_obj>
<aa>aa value</aa>
<bb>bb value</bb>
</lkup_a_obj>
<obj_lkup>
<aa>aa value</aa>
<bb>bb value</bb>
</obj_lkup>
<lkup_aa_obj>
<foo>foo</foo>
<bar>bar</bar>
<foo_bar>the foobar value</foo_bar>
</lkup_aa_obj>
<obj_aalkup>
<foo>foo</foo>
<bar>bar</bar>
<foo_bar>the foobar value</foo_bar>
</obj_aalkup>
<deep>
<deeper>
<deep_aalkup>
<foo>foo</foo>
<bar>bar</bar>
<foo_bar>the foobar value</foo_bar>
</deep_aalkup>
</deeper>
</deep>
</a_configs>