
Hi all, I'm a bit lost. I'm having a problem with xml light but as a Haskell newbie it could be of course that the problem is sitting between my keyboard and chair. I tried hard to create a minimal example. Here is a minimal xmltest.hs: <-----------------------------snip--------------------------------> module Main where import System.Environment.UTF8 import qualified System.IO.UTF8 as U import System.IO import Text.XML.Light data CTest = CTest { ctName :: String , ctLocation :: String } deriving (Show,Read,Eq,Ord) getXmlContent :: Handle -> IO CTest getXmlContent inh = do xml <- U.hGetContents inh let content = parseXMLDoc xml case content of Just c -> do let name = case findChild (unqual "name") c of Nothing -> "<unknown>" Just n' -> strContent n' let path = case findChild (unqual "location") c of Nothing -> "<unknown>" Just path' -> case findAttr (unqual "path") path' of Nothing -> "<unknown>" Just p -> p return CTest { ctName=name, ctLocation=path} _ -> fail "not expected" readXmlFile :: FilePath -> IO CTest readXmlFile f = do inh <- U.openBinaryFile f ReadMode xml <- getXmlContent inh hClose inh return xml doSomething :: Show a => a -> IO () doSomething xml = print xml main :: IO () main = do args <- getArgs xml <- readXmlFile $ head args doSomething xml <-----------------------------snap--------------------------------> Here is the test.xml I use: <-----------------------------snip--------------------------------> <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE entry SYSTEM 'test.dtd'> <entry> <name>some name</name> <description> bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla </description> <location path='/info/somepath'/> </entry> <-----------------------------snap--------------------------------> Here the output of the program: CTest {ctName = "some name", ctLocation = "<unknown>"} which is wrong. If I delete just one of the 'bla bla' lines then the output of the program is: CTest {ctName = "some name", ctLocation = "/info/somepath"} which is correct. Question: What is my error? -- Manfred