xml - 在 xml-conduit 中组合 requireAttr 和ignoreAttrs

标签 xml haskell xml-conduit

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

我的内部解析器如下所示:

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

运行时,我收到一条很长的错误消息,如下所示:

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

如何解决这个问题?

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

最佳答案

ignoreAttrs 文档明确指出它应在 requireAttr 之后运行.

唯一的问题是如何将它们结合起来。

AttrParser 有一个 Control.Applicative 实例。因此,您可以将其与 Applicative 之一结合起来。运算符。

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

<*然而,适合该目的。

示例:

import Control.Applicative ((<*))

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

关于xml - 在 xml-conduit 中组合 requireAttr 和ignoreAttrs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21365549/

相关文章:

xml - haskell:xml过滤子树

haskell - 如何使用 xml-conduit 游标接口(interface)从大型 XML 文件(大约 30G)中提取信息

c++ - QXml 和 QDom 有什么区别?

xml - XML 文件中的游戏逻辑

xml - 如何删除 Magento 中的 “My Cart” 和 “Checkout” 菜单链接?

java - 将 JSON 转换为 XML,而不将十进制转换为科学记数法

haskell - 为什么在 IO Monad 中包装 IO 结果

haskell - 将一种类型约束为另一种类型的模式

列表内容的 Haskell 模式匹配

xml - 忽略流式 xml 管道中的子树