Macro expansion

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:

and note the following element expansion:

Macro expansion XML Examples

  1. XML with macros
    <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>
      
  2. XML with macros printed as a property list
    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};
                   };
              };
         };
      
  3. XML with all macros expanded to values
    <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>