module Text.XML.HXT.Validator.Validation
( getValidatedDoc
, module Text.XML.HXT.Validator.ValidationFilter
)
where
import Text.XML.HXT.DOM.XmlTree
import Text.XML.HXT.DOM.XmlState
import Text.XML.HXT.Validator.ValidationFilter
import Text.XML.HXT.Parser.XmlOutput
( traceTree
, traceSource
, traceMsg
)
getValidatedDoc :: XmlStateFilter state
getValidatedDoc
= traceMsg 1 "validating document"
.>>
( ( runValidation
.>>
traceTree
.>>
traceSource
)
`whenM` (isRoot .> getChildren)
)
where
runValidation t
= ( issueError $$< res )
>>
( if null errs
then ( traceMsg 1 "transforming validated document"
.>>
liftMf transform
)
else liftMf (setStatus c_err "validating document")
) t
where
res = validate t
errs = isXError .> neg isWarning $$ res