【问题标题】:In Haskell's xml-conduit, how can I create a node?在 Haskell 的 xml-conduit 中,如何创建节点?
【发布时间】:2018-09-04 02:54:08
【问题描述】:

我是 Haskell 初学者。我正在使用xml-conduit 将一些 XML 转换为 HTML,as seen in the Yesod tutorial。我有一些属性和一些内容,我想将它们制作成一个节点,以将其添加到现有的 XML 中。创建节点的最佳方法是什么?我试过打电话给Node,但它说不在范围内。我可以使用NodeContent "content"NodeElement (Element ... ) 创建一个节点,但是如何创建一个节点,同时提供两个 元素和内容?

(Yesod 书建议使用 Hamlet,但我宁愿不涉及 Hamlet,因为我已经在使用 Blaze,并且不想学习和维护太多的模板语言。)

【问题讨论】:

    标签: xml haskell yesod xml-conduit


    【解决方案1】:

    这里是Node的构造函数和字段...

    data Node
        = NodeElement Element
        | NodeInstruction Instruction
        | NodeContent Text
        | NodeComment Text
    

    ...和Element:

    data Element = Element
        { elementName       :: Name
        , elementAttributes :: Map.Map Name Text
        , elementNodes      :: [Node]
        }
    

    请注意,Element 包含 Nodes 的列表,因此您可以使其包含 NodeContent

    NodeElement $ Element "b" empty [ NodeContent "Title" ]
    

    (参见链接教程中的this example。)

    【讨论】:

    • 太棒了,谢谢。第一个数据结构中的守卫在做什么?我不确定我是否理解。
    • @Jono 那些不是警卫。那就是the definition of the Node type(注意data 关键字),它有四个构造函数。
    猜你喜欢
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 2012-12-20
    • 2013-11-25
    • 1970-01-01
    相关资源
    最近更新 更多