我有一张单子,像这样:
((IDENTIFRIAR . str) (SYMBOL . =) (STRING-CONSTANT . Hello world! ) (BOOLEAN-CONSTANT . true))我想以xml的形式生成并输出它,比如:
<elements>
<IDENTIFRIAR>str<IDENTIFRIAR/>
<SYMBOL>=<SYMBOL/>
<STRING-CONSTANT> Hello world!<STRING-CONSTANT/>
<BOOLEAN-CONSTANT>true<BOOLEAN-CONSTANT/>
<elements/>我该怎么做呢?我发现自己查看了一些关于XML和xexpr的冗长文档,而不了解如何实际创建、追加和更改XML实体。
发布于 2014-05-13 13:02:28
首先,让我们清理一下您的输入。例如:
'(STRING-CONSTANT . Hello world!)这是无效的。
相反,让我们创建一个值为字符串的关联列表,并将其用作输入:
(define alist '((IDENTIFRIAR . "str")
(SYMBOL . "=")
(STRING-CONSTANT . "Hello world!" )
(BOOLEAN-CONSTANT . "true")))让我们将其转换为X-费用,这是一种将XML表示为s表达式的方法。
(define xexprs (for/list ([a (in-list alist)])
(match-define (cons k v) a)
`(,k () ,v)))
;; =>
;; '((IDENTIFRIAR () "str")
;; (SYMBOL () "=")
;; (STRING-CONSTANT () "Hello world!")
;; (BOOLEAN-CONSTANT () "true"))现在,让我们从Racket的xml集合中使用xexpr->string来转换它。
(require xml)
(xexpr->string `(elements () ,@xexprs))
;; =>
;; "<elements><IDENTIFRIAR>str</IDENTIFRIAR><SYMBOL>=</SYMBOL><STRING-CONSTANT>Hello world!</STRING-CONSTANT><BOOLEAN-CONSTANT>true</BOOLEAN-CONSTANT></elements>"如果您想要缩进,则改为:
(display-xml/content (xexpr->xml `(elements () ,@xexprs)))它显示:
<elements>
<IDENTIFRIAR>
str
</IDENTIFRIAR>
<SYMBOL>
=
</SYMBOL>
<STRING-CONSTANT>
Hello world!
</STRING-CONSTANT>
<BOOLEAN-CONSTANT>
true
</BOOLEAN-CONSTANT>
</elements>https://stackoverflow.com/questions/23630891
复制相似问题