/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠO range Ċ Ġ* Ċ Ġ* ĠH url ĠJVM Ġ( JVM ĠRunner Ġfor Ġhttps :// h url . dev ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . orange . cc md . h url . core . utils Ċ Ċ import Ġorg . xml . sax . Input Source Ċ import Ġorg . xml . sax . helpers . Default Handler Ċ import Ġjava . io . String Reader Ċ import Ġjavax . xml . parsers . Document BuilderFactory ĊĊ Ċ /** Ċ Ġ* ĠReturn Ġthe Ġbyte Ġcount Ġof Ġa Ġvalid Ġxml Ġtext Ġin Ġa Ġtext Ġstream . Ċ Ġ* ĠThe Ġimplementation Ġis Ġdummy Ġfor Ġthe Ġmoment Ġbecause ĠI Ġwas Ġunable Ġto Ġget Ġvalid Ġbyte Ġcount Ġresult Ċ Ġ* Ġwith Ġunicode Ġthat Ġare Ġencoded Ġwith Ġ 2 + Ġbytes Ġin ĠUTF - 8 ... Ċ Ġ* ĠFirst Ġversion Ġwas : Ċ Ġ* Ċ Ġ* Ġinternal Ġfun Ġget Xml Byte Count ( text : ĠString ): ĠInt ? Ġ{ Ċ Ġ* ĠĠĠĠ Ġval Ġxml if Ġ= ĠXML Input Factory . newInstance () Ċ Ġ* ĠĠĠĠ Ġxml if . setProperty ( IS _ NAMESPACE _ AW ARE , Ġtrue ) Ċ Ġ* ĠĠĠĠ Ġval Ġbytes Ġ= Ġtext . toByteArray ( charset Ġ= ĠChar sets . UTF _ 8 ) Ċ Ġ* ĠĠĠĠ Ġval ĠinputStream Ġ= ĠByteArrayInputStream ( bytes ) Ċ Ġ* ĠĠĠ Ġval Ġxml r Ġ= Ġxml if . create X MLE vent Reader ( inputStream , Ġ" UTF - 8 ") Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġvar Ġfirst Element : ĠStart Element ? Ġ= Ġnull Ċ Ġ* ĠĠĠĠ Ġvar Ġbytes Read Ġ= Ġ 0 Ċ Ġ* ĠĠĠĠ Ġvar Ġlevel Ġ= Ġ 0 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġtry Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġloop @ Ġwhile Ġ( xml r . hasNext ()) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent Ġ= Ġxml r . next Event () Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . eventType ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX MLE vent . START _ ELEMENT Ġ-> Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Element Ġ= Ġevent . as Start Element () Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Element Ġ== Ġnull ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Element Ġ= Ġstart Element Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Element Ġ!= Ġnull Ġ&& Ġfirst Element . name Ġ== Ġstart Element . name ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ+= Ġ 1 Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX MLE vent . END _ ELEMENT Ġ-> Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Element Ġ= Ġevent . as End Element () Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Element Ġ!= Ġnull Ġ&& Ġfirst Element . name Ġ== Ġend Element . name ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ-= Ġ 1 Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( level Ġ== Ġ 0 ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes Read Ġ= Ġend Element . location . character Offset Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak @ loop Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠ Ġreturn Ġnull Ċ Ġ* ĠĠĠ Ġ} Ċ Ġ* Ċ Ġ* ĠĠĠ Ġreturn Ġbytes Read Ċ Ġ* } Ċ Ġ*/ Ċ Ċ internal Ġfun Ġget Xml Byte Count ( text : ĠString ): ĠInt ? Ġ{ ĊĊĠĠĠ Ġvar Ġtermin ator Index Ġ= Ġtext . indexOf ( char Ġ= Ġ' >') ĊĠĠĠ Ġif Ġ( termin ator Index Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġtermin ator Index Ġ+= Ġ 1 ĊĊĠĠĠ Ġwhile Ġ( termin ator Index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtermin ator Index Ġ= Ġtext . indexOf ( char Ġ= Ġ'>', ĠstartIndex Ġ= Ġtermin ator Index ) ĊĠĠĠĠĠĠĠ Ġif Ġ( termin ator Index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslice Ġ= Ġtext . take ( termin ator Index Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isValid Xml ( slice )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġslice . toByteArray (). size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtermin ator Index Ġ+= Ġ 1 ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ internal Ġfun ĠisValid Xml ( text : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġdb Factory Ġ= ĠDocument BuilderFactory . newInstance () ĊĠĠĠ Ġdb Factory . is Namespace Aware Ġ= Ġtrue ĊĠĠĠ Ġval Ġd Builder Ġ= Ġdb Factory . new Document Builder () ĊĠĠĠ Ġd Builder . set ErrorHandler ( Default Handler ()) ĊĠĠĠ Ġval Ġxml Input Ġ= ĠInput Source ( String Reader ( text )) ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġd Builder . parse ( xml Input ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtrue Ċ }