module Text.XMLParser.Util (

 getTagOfNameChildren
,getTagsByName
,getNonEmptyTagOfNameChildren
,getNonEmptyTagsByName
,getNonEmptyAttributeByName
) where

import Text.XMLParser.XMLParser
import Data.Maybe

makeNonEmpty [] = Nothing
makeNonEmpty xs@(_:_) = Just xs

getTagName (Tag _ str _) = Just str
getTagName _ = Nothing

getTagText (TagString a) = Just a
getTagText _ = Nothing

getTagChildText (Tag _ _ (Just xs)) = catMaybes $  map getTagText xs
getTagChildText _ =  []

getTagOfNameChildren str (Tag _ str' (Just xs))
  | str == str' = Just xs
  | otherwise = Nothing

getTagsByName str xs = filter (maybe False (==str) . getTagName) xs

getNonEmptyTagOfNameChildren str tag = getTagOfNameChildren str tag >>= makeNonEmpty
getNonEmptyTagsByName name xs = makeNonEmpty $ getTagsByName name xs
getNonEmptyAttributeByName attr (Tag attrs _ _) = lookup attr attrs