module ETree(ETree, xmlToETree, etreeToXML) where
import XML
import Tree
data ETree
= Element Name AttList [ETree]
| Text String
deriving Show
xmlToETree :: XML -> ETree
xmlToETree = maybe fallback id . foldTree etree mcons [] where
etree (TXNode txt) _ = Just $ Text txt
etree (ELNode gi atts) c = Just $ Element gi atts c
etree RTNode (c:_) = Just c
etree _ _ = Nothing
mcons = maybe id (:)
fallback = Text "Error: ill-formed XML input"
etreeToXML :: ETree -> XML
etreeToXML = anaTree psi where
psi (Text txt) = (TXNode txt,[])
psi (Element gi atts content) = (ELNode gi atts,content)