package Ġch . frequ enz di eb . common čĊč Ċ import Ġorg . slf 4 j . LoggerFactory č Ċ import Ġorg . springframework . stereotype . Service č Ċ import Ġorg . w 3 c . dom . Document č Ċ import Ġorg . w 3 c . dom . Element č Ċ import Ġorg . w 3 c . dom . Node č Ċ import Ġorg . w 3 c . dom . traversal . Document Traversal č Ċ import Ġorg . w 3 c . dom . traversal . Node Filter č Ċ import Ġjava . io . ByteArray OutputStream č Ċ import Ġjava . io . InputStream č Ċ import Ġjava . io . OutputStream č Ċ import Ġjava . io . OutputStream Writer č Ċ import Ġjavax . xml . parsers . Document BuilderFactory č Ċ import Ġjavax . xml . transform . Output Keys č Ċ import Ġjavax . xml . transform . Transformer Factory č Ċ import Ġjavax . xml . transform . dom . DOM Source č Ċ import Ġjavax . xml . transform . stream . Stream Result čĊč Ċ @ Service č Ċ class ĠTemplate Parser Ġ{ čĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( this :: class . java ) čĊčĊĠĠĠ Ġfun Ġparse HTML Template ( čĊĠĠĠĠĠĠĠ Ġtemplate : ĠInputStream čĊĠĠĠ Ġ): ĠDocument Ġ= ĠDocument BuilderFactory čĊĠĠĠĠĠĠĠ Ġ. newInstance () čĊĠĠĠĠĠĠĠ Ġ. new Document Builder () čĊĠĠĠĠĠĠĠ Ġ. parse ( template ) čĊčĊĠĠĠ Ġfun Ġreplace Mark ups ( document : ĠDocument , Ġmarkup Replacement s : ĠMap < String , ĠElement >): ĠDocument Ġ= čĊĠĠĠĠĠĠĠ Ġdocument . apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindAll Mark ups Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarkup Replacement s [ textContent ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġreplace Markup Ġ{ Ġit Ġ} Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnormalize () čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ( ByteArray OutputStream (). let Ġ{ Ġout Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint Document ( out ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . toString (" UTF - 8 ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun ĠDocument . print Document ( out : ĠOutputStream ) Ġ= čĊĠĠĠĠĠĠĠ ĠTransformer Factory . newInstance (). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Transformer (). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Output Property ( Output Keys . OM IT _ XML _ DECL AR ATION , Ġ" no ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Output Property ( Output Keys . METHOD , Ġ" xml ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Output Property ( Output Keys . IND ENT , Ġ" yes ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Output Property ( Output Keys . ENCODING , Ġ" UTF - 8 ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Output Property ("{ http :// xml . apache . org / xsl t } indent - amount ", Ġ" 4 ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransform ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDOM Source ( this @ print Document ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStream Result ( OutputStream Writer ( out , Ġ" UTF - 8 ")) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun ĠDocument . findAll Mark ups ( node Consumer : ĠNode . () Ġ-> ĠUnit ) Ġ{ čĊĠĠĠĠĠĠĠ Ġ( this Ġas ĠDocument Traversal ). createNode Iterator ( this , ĠNode Filter . SHOW _ COMMENT , Ġnull , Ġtrue ). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentNode Ġ= Ġnext Node () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentNode Ġ!= Ġnull Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Consumer ( currentNode ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġbreak čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( true ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun ĠNode . replace Markup ( node Consumer : ĠNode . () Ġ-> ĠNode ) Ġ{ čĊĠĠĠĠĠĠĠ Ġparent Node . replace Child ( node Consumer (), this ) čĊĠĠĠ Ġ} č Ċ } čĊ