folgerhs-0.1.0.0: src/Folgerhs/Utils.hs
module Folgerhs.Utils ( isTag
, drillTagPath
, attr
, descendants
) where
import Data.Maybe
import Text.XML.Light.Proc (elChildren)
import Text.XML.Light.Types (QName (..), Element (..), Content, Attr (..) )
isTag :: String -> Element -> Bool
isTag n = (==) n . qName . elName
drillTagPath :: [String] -> [Element] -> [Element]
drillTagPath [] = id
drillTagPath (n:ns) = drillTagPath ns . concatMap elChildren . filter (isTag n)
attr :: String -> Element -> Maybe String
attr n = listToMaybe . map attrVal . filter ((==) n . qName . attrKey) . elAttribs
descendants :: Element -> [Element]
descendants e = e : concatMap descendants (elChildren e)