final private void compile() {
    children = (XML[]) childList.toArray(XML.class) ;
    attributes = (String[]) attributeList.toArray(String.class) ;
    values = (String[]) valueList.toArray(String.class) ;
    if (children == null)
      children = new XML[0] ;
    if ((attributes == null) || (values == null))
      attributes = values = new String[0] ;
    if (print) {
      byte iB[] = new byte[indent] ;
      for (int n = indent ; n-- > 0 ;) iB[n] = ' ' ;
      String iS = new String(iB) ;
      I.say("" + iS + "tag name: " + tag) ;
      for (int n = 0 ; n < values.length ; n++)
        I.say("" + iS + "att/val pair: " + attributes[n] + " " + values[n]) ;
      I.say("" + iS + "tag content: " + content) ;
    }
    indent++ ;
    for (XML child : children) child.compile() ;
    indent-- ; 
  }