+readXMLFile file = do
+ content <- readFile file
+ let Just root = parseXMLDoc content
+ return $
+ foldl (\acc elem ->
+ case elementXMLToMovie elem of
+ Nothing -> acc
+ Just movie -> movie : acc)
+ []
+ (elChildren root)
+
+elementXMLToMovie :: Element -> Maybe Movie
+elementXMLToMovie element =
+ findAttr (simpleName "id") element>>=
+ \id -> findChild (simpleName "files") element >>=
+ \filesElement ->
+ let files = map strContent (findChildren (simpleName "file") filesElement) in
+ findChild (simpleName "title") element >>=
+ \titleElement ->
+ let title = strContent titleElement in
+ Just $ movieSample{movieId = read id, movieFiles = files, movieTitle = title} -- TODO
+
+simpleName :: String -> QName
+simpleName s = QName s Nothing Nothing
+