在xml-conduit中组合requireAttr和ignoreAttrs

时间:2014-01-26 15:50:11

标签: xml haskell xml-conduit

我正在使用Text.XML.Stream.Parse中的xml-conduit来解析大型XML文件。

我的内部解析器看起来像这样:

parseUserRow = tagName "row" (requireAttr "name") $ \name -> do -- [....]

运行时,我收到一条很长的错误信息:

xmltest.hs: UnparsedAttributes -- [...]

如何解决此问题?

注意:提问者立即回答了这个问题,因此故意不会展示任何研究成果。

1 个答案:

答案 0 :(得分:2)

ignoreAttrs文档明确声明它应在 requireAttr后运行

唯一的问题是如何将这些结合起来。

AttrParserControl.Applicative个实例。因此,您可以将其与Applicative运算符之一结合使用。

请注意,虽然requireAttr <tagname>的值类型为AttrParser Text,但ignoreÀttrs具有无值类型AttrParser ()。这意味着,您无法使用<*>运算符。

但是,

<*适用于此目的。

示例:

import Control.Applicative ((<*))

parseMyTag = tagName "mytag" (requireAttr "name" <* ignoreAttrs) $ \name -> do -- [...]