package Ġnet . jo ea ustin . easy xml Ċ Ċ private Ġconst Ġval ĠP ADDING Ġ= Ġ" ĠĠĠ Ġ" Ċ Ċ class ĠXml Element ( ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġinner Text : ĠString , ĊĠĠĠ Ġval Ġattributes : ĠList < XmlAttribute >, ĊĠĠĠ Ġval Ġsub Components : ĠList < Xml Component > Ċ ) Ġ: ĠBase Xml Component () Ġ{ ĊĊĠĠĠ Ġoperator Ġfun Ġget ( child Name : ĠString ): ĠList < XmlElement > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Children ( child Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Children ( name : ĠString , Ġignore Case : ĠBoolean Ġ= Ġfalse ): ĠList < XmlElement > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsub Components ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Ġis ĠXml Element Ġ&& Ġchild . name . equals ( name , Ġignore Case ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġchild Ġ-> Ġchild Ġas ? ĠXml Element Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Children (): ĠList < XmlElement > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsub Components ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġcomponent Ġ-> Ġcomponent Ġas ? ĠXml Element Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget First Child ( name : ĠString , Ġignore Case : ĠBoolean Ġ= Ġfalse ): ĠXml Element ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsub Components ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġc Ġ-> Ġ( c Ġas ? ĠXml Element )?. name . equals ( name , Ġignore Case ) Ġ} Ġas ? ĠXml Element ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget AttributeValue ( name : ĠString , Ġignore Case : ĠBoolean Ġ= Ġfalse ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġattributes . first OrNull Ġ{ Ġattr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattr . name . equals ( name , Ġignore Case ) ĊĠĠĠĠĠĠĠ Ġ} ?. value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild ( sb : ĠStringBuilder , Ġcurrent Padding : ĠString , Ġbuild Options : ĠXml Build Options ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnormalized Name Ġ= Ġnormalize Key ( name ) ĊĠĠĠĠĠĠĠ Ġsb . append ( current Padding ) ĊĠĠĠĠĠĠĠ Ġsb . append ("< ") ĊĠĠĠĠĠĠĠ Ġsb . append ( normalized Name ) ĊĊĠĠĠĠĠĠĠ Ġattributes . forEach Ġ{ Ġattr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattr . build ( sb , Ġ"", Ġbuild Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( innerText . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("> ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( escape Text ( innerText )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( sub Components . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( build Options . pretty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ln ("> ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("> ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsub Padding Ġ= Ġif Ġ( build Options . pretty ) Ġcurrent Padding Ġ+ ĠP ADDING Ġelse Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Components . forEach Ġ{ Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . build ( sb , Ġsub Padding , Ġbuild Options ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( innerText . isEmpty () Ġ&& Ġsub Components . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( build Options . pretty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ln (" /> ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append (" /> ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// If Ġwe 're Ġdoing Ġpretty Ġprint Ġand Ġthere Ġaren 't Ġchildren , Ġthe Ġclosing Ġtag Ġshould Ġbe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// on Ġa Ġnew Ġline Ġindent ed Ġto Ġmatch Ġthe Ġstart Ġtag ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( build Options . pretty Ġ&& Ġsub Components . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( current Padding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("</ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( normalized Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( build Options . pretty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ln ("> ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("> ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= Ġjava . lang . StringBuilder () ĊĠĠĠĠĠĠĠ Ġbuild ( sb , Ġ"", ĠXml Build Options ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBuilder ( val Ġname : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġattributes Ġ= ĠArrayList < XmlAttribute >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġchildren Ġ= ĠArrayList < Xml Component >() ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinner Text Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Inner Text ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Text Ġ= Ġtext ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Attribute ( attr : ĠXml Attribute ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattributes . add ( attr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd XmlElement ( element : ĠXml Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . add ( element ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Comment ( comment : ĠXml Comment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . add ( comment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Comment ( comment Text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Comment ( Xml Comment ( comment Text )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠXml Element Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠXml Element ( name , Ġinner Text , Ġattributes , Ġchildren ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }