【问题标题】:Parse XML into data structures, with a reversible common definition?将 XML 解析为具有可逆通用定义的数据结构?
【发布时间】:2016-01-22 14:07:31
【问题描述】:

可能你们中的任何人都知道一个可以通过以下方式将 XML 解析为 数据结构?

parseXML
  [xmldef| <a>Int</a>[<b>String</b>] |]
  "<a>1</a><b>Hello</b><b>World</b>"
  == (1, ["Hello", "World"])

这里的关键是解析器需要一个足够描述性的定义 处理缺失的元素、元素列表,并将它们转化为本机数据结构。

我觉得这个定义的想法很有吸引力,并且认为它是 可能非常健壮。例如。呈现 XML 也是可逆的。

renderXML
  [xmldef| <a>Int</a>[<b>String</b>] |]
  (1, ["Hello", "World"])
  == "<a>1</a><b>Hello</b><b>World</b>"

这是我想象的另一个例子:

data Coord = Coord Int Int
instance XMLDef Coord where
  xmlDefinition = [xmldef| <x>Int</x><y>Int</y> |]


coordsDef = [xmldef| [<coord>Coord</coord>] |] 

parseXML coordsDef "" == []
parseXML coordsDef longXML == [Coord 1 2, Coord 3 4]
longXML = "<coord><x>1</x><y>2</y></coord><coord><x>3</x><y>4</y></coord>"

renderXML coordsDef [Coord 5 6] == "<coord><x>5</x><y>6</y></coord>"

看起来相当简洁有力的符号。做这样的事情 Haskell 存在吗? 或者对于任何其他语言?

我知道this library (named 'syntax') 因此,如果没有其他选择,它也许可以用于构建上述 API 此时存在。

到目前为止

我用过the library named 'xml',它适用于简单的任务, 但它有两个缺点:它不支持一个共同的定义来解析 并渲染 XML,它比我概述的语法要冗长得多 以上是我的经验。

环顾四周,我发现haxml、hxt和hexpat也很流行 选择。然而,它们似乎也以同样的方式受到限制:不可逆 支持的定义,并且比我正在寻找的要详细得多 带着这个问题。

【问题讨论】:

    标签: xml parsing haskell serialization


    【解决方案1】:

    已经有一个bidirectional JSON parser in Haskell 的实现,因此可以使用类似的方法来实现一个可逆的 XML 解析器。还有一种称为BIGUL 的特定领域语言可用于在Haskell 中实现可逆解析器。

    【讨论】:

      猜你喜欢
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多