Hi Rodrigo,

> Just one more question, I didn't find any example describing how to get the 
> text information of a XML element in the picklers tutorial. So, if the use 
> case 
> element is described as follwing:
> ...

here is a complete example for your use case.

Take the following XML data in file "uc.xml"

------------------------

<useCaseModel name="firstUseCaseModel">
  <useCase>
    <id>UC_01</id>
    <name>Opening ...</name>
    <description>This use case describes how...</description>
  </useCase>
</useCaseModel>

------------------------

and the following picker and test

------------------------

module Main
where

import Text.XML.HXT.Arrow


type Id = String
type Name = String
type Description = String

data UseCaseModel
    = UCM Name [UseCase]
      deriving (Show)

data UseCase
    = UseCase Id Name Description
      deriving (Show)

instance XmlPickler UseCase where
    xpickle = xpUseCase

xpUseCaseModel :: PU  UseCaseModel
xpUseCaseModel =
    xpElem "useCaseModel" $
    xpWrap ( uncurry UCM
           , \ (UCM n ucs) -> (n, ucs) ) $
    xpPair ( xpAttr "name" xpText )
           ( xpList xpUseCase )

xpUseCase :: PU UseCase
xpUseCase =
    xpElem "useCase" $
    xpWrap ( uncurry3 UseCase
           ,  \ (UseCase i n d) -> (i, n, d) )  $
    xpTriple (xpElem "id"          xpText)
             (xpElem "name"        xpText)
             (xpElem "description" xpText)


main    :: IO ()
main
    = do
      runX ( xunpickleDocument xpUseCaseModel
                      [ (a_validate,v_0)
                      , (a_trace, v_1)
                      , (a_remove_whitespace,v_1)  -- !!!!!!!!!! throw away 
whitespace
                      , (a_preserve_comment, v_0)  -- !!!!!!!!!! throw away 
comments
                      ] "uc.xml"
             >>>
             processUseCaseModel
             >>>
             xpickleDocument xpUseCaseModel
                      [ (a_indent, v_1)
                      ] "new-uc.xml"
           )
      return ()
 
-- the dummy for processing the unpickled data
 
processUseCaseModel     :: IOSArrow UseCaseModel UseCaseModel
processUseCaseModel
    = arrIO ( \ x -> do {print x ; return x})

-----------------------

This program will print the internal haskell value and
writes the data to "new-uc.xml"

Cheers

Uwe

-- 

Uwe Schmidt
Web: http://www.fh-wedel.de/~si/
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to