[Haskell-cafe] arrow question HXT related

Andrea Rossato mailing_list at istitutocolli.org
Sat Aug 11 05:50:19 EDT 2007


Hi,

I think this is just a stupid arrow question. Still I cannot find
where my mistake is located.

Suppose I have a simple xml document I want to process with HXT:
<root>
  <elem>
   <sub />
   <risub>text</risub>
  </elem>
</root>

After extracting <elem> I want to duplicate the children trees with
the arrow operator (&&&) and process them to get each sub element,
like I try in treMe2.

Below the example code. While I can get each sub element with tryMe
and tryMe1, tryMe2 will produce a []. Instead I want something like
tryMe3. I think I'm missing something stupid but right now I just feel
stupidly blind.

Thanks for your help,

Andrea


import Text.XML.HXT.Arrow

xml = "<root><elem><sub /><risub>text</risub></elem></root>"

tryMe = runLA arrow []
    where arrow = constA xml >>> xread 
                  >>> 
                  deep (hasName "elem") >>> getChildren 
                  >>> 
                  (hasName "risub" >>> getChildren >>> getText)

tryMe1 = runLA arrow []
    where arrow = constA xml >>> xread 
                  >>> 
                  deep (hasName "elem") >>> getChildren 
                  >>> 
                  (hasName "sub" >>> withDefault (getChildren >>> getText) "ciao")

tryMe2 = runLA arrow []
    where arrow = constA xml >>> xread 
                  >>> 
                  deep (hasName "elem") >>> getChildren 
                  >>> 
                  (hasName "sub" >>> withDefault (getChildren >>> getText) "ciao")
                  &&&
                  (hasName "risub" >>> getChildren >>> getText)

tryMe3 = runLA arrow []
    where arrow = constA xml >>> xread 
                  >>> 
                  constA "first"
                  &&&
                  constA "second"

The output:

*test> tryMe
["text"]
*test> tryMe1
["ciao"]
*test> tryMe2
[]
*test> tryMe3
[("first","second")]
*test> 


More information about the Haskell-Cafe mailing list