Разбор HXT в список

Недавно я писал об использовании рассола HXT для синтаксического анализа. После некоторого чтения я решил использовать обычный HXT.

Однако я не могу создавать списки, т.е. У меня есть XML-документ:

<meta>
    <sampleQuery>sample1</sampleQuery>
    <sampleQuery>sample2</sampleQuery>
</meta>

и функция разбора

parseMeta =
  proc x -> do
    meta          <- deep (isElem >>> hasName "meta") -< x
    sampleQueries <- getText <<< getChildren <<< deep (hasName "sampleQuery") -< meta
    returnA -< Meta sampleQueries

SampleQueries должен иметь тип [String] (в данном случае ["sample1", "sample2"]), но я не могу этого добиться.


person prinsen    schedule 29.10.2013    source источник


Ответы (1)


Обозначения со стрелками здесь кажутся излишними.

import Text.XML.HXT.Core

xml = unlines 
  [ "<meta>"
  , "<sampleQuery>sample1</sampleQuery>"
  , "<sampleQuery>sample2</sampleQuery>"
  , "</meta>"
  ]

queries = hasName "meta" /> hasName "sampleQuery" /> getText

main = runX (readString [] xml /> queries) >>= print

Это напечатает ["sample1","sample2"], как и ожидалось.

person Travis Brown    schedule 19.11.2013