我正在使用Text.XML.Stream.Parse
中的xml-conduit
来解析大型XML文件。
我的内部解析器看起来像这样:
parseUserRow = tagName "row" (requireAttr "name") $ \name -> do -- [....]
运行时,我收到一条很长的错误信息:
xmltest.hs: UnparsedAttributes -- [...]
如何解决此问题?
注意:提问者立即回答了这个问题,因此故意不会展示任何研究成果。
答案 0 :(得分:2)
ignoreAttrs
文档明确声明它应在 requireAttr
后运行。
唯一的问题是如何将这些结合起来。
AttrParser
有Control.Applicative
个实例。因此,您可以将其与Applicative
运算符之一结合使用。
请注意,虽然requireAttr <tagname>
的值类型为AttrParser Text
,但ignoreÀttrs
具有无值类型AttrParser ()
。这意味着,您无法使用<*>
运算符。
<*
适用于此目的。
示例:
import Control.Applicative ((<*))
parseMyTag = tagName "mytag" (requireAttr "name" <* ignoreAttrs) $ \name -> do -- [...]