在Racket中从X表达式生成HTML的推荐方法是什么?看起来像response/xexpr
会这样做,但似乎是为了提供http响应而设计的。我唯一需要的是从Racket列表(或X表达式)生成HTML字符串,不需要涉及Web服务器。
答案 0 :(得分:6)
如果我没有弄错的话,xml
库中的xexpr->string函数应该按照您的要求进行操作。有关使用它的示例,您可以查看here,其中示例使用它为简化的Web服务器应用程序生成HTML响应。
> (xexpr->string '(html (head (title "Hello")) (body "Hi!")))
"<html><head><title>Hello</title></head><body>Hi!</body></html>"
答案 1 :(得分:5)
如果您愿意为可能更方便的设施转储xexprs,那么有一种新语言可用于生成Racket网页。它尚未记录(因此它仍然是新的并且没有公开),但您可以在these sources中看到它是如何使用的。作为演示它的快速示例,运行:
#lang scribble/html
@(define name "foo")
@html{@head{@title{@name}}
@body{@h1{@name}}}
另一个例子将它用作库:
#lang at-exp racket/base
(require scribble/html)
(define (page name)
(output-xml
@html{@head{@title{@name}}
@body{@h1{@name}}}))
@page{foo}
不需要at-exp
,只需在代码中编写大量文本即可。 (它对xexprs也同样有用。)
主要区别在于,在这种语言中,HTML标签实际上是绑定,这使得维护代码变得方便。它在文本中可以非常灵活 - 例如,没有必要将它保持在严格的字符串和子标记列表中,因此您永远不会遇到诸如在何处使用append-map
等问题。