将XML解析为记录

将XML解析为记录,xml,haskell,Xml,Haskell,我想编写一个Haskell库来使用web服务API。我从服务器得到一个XML或JSON响应,比如说它看起来像这样: <foo> <bar>1</bar> <baz>moo</baz> </foo> 我如何将其抽象出来,从而不必手动解析XML并手动选择各个组件?我希望有一个API可以让我描述从XML元素和属性到记录部分的映射,并为我完成其余的工作。您有API的DOCTYPE或XML模式吗?我不这么认为。会有帮

我想编写一个Haskell库来使用web服务API。我从服务器得到一个XML或JSON响应,比如说它看起来像这样:

<foo>
    <bar>1</bar>
    <baz>moo</baz>
</foo>

我如何将其抽象出来,从而不必手动解析XML并手动选择各个组件?我希望有一个API可以让我描述从XML元素和属性到记录部分的映射,并为我完成其余的工作。

您有API的DOCTYPE或XML模式吗?我不这么认为。会有帮助吗?我不介意写它,但我担心这比手工编写解析代码要困难得多。实际上,为了将其转换为任何数据类型(记录也是如此),需要知道您期望的数据类型。如何使用并不重要:您可以将其硬编码到手写解析器中(正如您计划的那样),或者从XML模式生成解析器(例如,使用
XsdToHaskell
from)。在目前没有更具体的建议的情况下,您现在可以看看。@Tintorius:不知道
XsdToHaskell
,我来看看,谢谢。我知道我必须指定数据类型,我希望我可以简单地传递一个“反序列化”过滤器函数,以应用于所讨论的属性或元素。
data Foo = Foo {
    bar :: Integer,
    baz :: String
}