在Racket中生成HTML

Ser*_*lla 6 html racket

在Racket中从X表达式生成HTML的推荐方法是什么?看起来response/xexpr会这样做,但似乎是为服务http响应而设计的.我唯一需要的是从Racket列表(或X表达式)生成HTML字符串,不需要涉及Web服务器.

dyo*_*yoo 6

如果我没有弄错的话,库中的xexpr-> string函数xml应该按照你的要求进行.有关使用它的示例,您可以在这里查看,示例使用它为简化的Web服务器应用程序生成HTML响应.

> (xexpr->string '(html (head (title "Hello")) (body "Hi!")))
"<html><head><title>Hello</title></head><body>Hi!</body></html>"
Run Code Online (Sandbox Code Playgroud)


Eli*_*lay 6

如果您愿意为可能更方便的设施转储xexprs,那么有一种新语言可用于生成Racket网页.它还没有记录(因此它仍然是新的,并没有公开),但你可以看到它是如何在这些来源中使用的.作为演示它的快速示例,运行以下命令:

#lang scribble/html
@(define name "foo")
@html{@head{@title{@name}}
      @body{@h1{@name}}}
Run Code Online (Sandbox Code Playgroud)

另一个例子将它用作库:

#lang at-exp racket/base
(require scribble/html)
(define (page name)
  (output-xml
   @html{@head{@title{@name}}
         @body{@h1{@name}}}))
@page{foo}
Run Code Online (Sandbox Code Playgroud)

at-exp不是必需的,只是在代码中编写大量文本很容易.(它对xexprs也同样有用.)

主要区别在于,在这种语言中,HTML标签实际上是绑定,这使得维护代码变得方便.它在文本中可以非常灵活 - 例如,没有必要将它保存到严格的字符串和子标签列表中,因此您永远不会遇到诸如使用位置append-map等问题.