首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Racket输出到XML文件

将Racket输出到XML文件
EN

Stack Overflow用户
提问于 2014-05-13 12:09:29
回答 1查看 270关注 0票数 0

我有一张单子,像这样:

代码语言:javascript
复制
((IDENTIFRIAR . str) (SYMBOL . =) (STRING-CONSTANT .  Hello world! ) (BOOLEAN-CONSTANT . true))

我想以xml的形式生成并输出它,比如:

代码语言:javascript
复制
<elements>
    <IDENTIFRIAR>str<IDENTIFRIAR/>
    <SYMBOL>=<SYMBOL/>
    <STRING-CONSTANT> Hello world!<STRING-CONSTANT/>
    <BOOLEAN-CONSTANT>true<BOOLEAN-CONSTANT/>
<elements/>

我该怎么做呢?我发现自己查看了一些关于XML和xexpr的冗长文档,而不了解如何实际创建、追加和更改XML实体。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-13 13:02:28

首先,让我们清理一下您的输入。例如:

代码语言:javascript
复制
'(STRING-CONSTANT . Hello world!)

这是无效的。

相反,让我们创建一个值为字符串的关联列表,并将其用作输入:

代码语言:javascript
复制
(define alist '((IDENTIFRIAR . "str")
                (SYMBOL . "=")
                (STRING-CONSTANT . "Hello world!" )
                (BOOLEAN-CONSTANT . "true")))

让我们将其转换为X-费用,这是一种将XML表示为s表达式的方法。

代码语言:javascript
复制
(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来转换它。

代码语言:javascript
复制
(require xml)
(xexpr->string `(elements () ,@xexprs))
;; =>
;; "<elements><IDENTIFRIAR>str</IDENTIFRIAR><SYMBOL>=</SYMBOL><STRING-CONSTANT>Hello world!</STRING-CONSTANT><BOOLEAN-CONSTANT>true</BOOLEAN-CONSTANT></elements>"

如果您想要缩进,则改为:

代码语言:javascript
复制
(display-xml/content (xexpr->xml `(elements () ,@xexprs)))

它显示:

代码语言:javascript
复制
<elements>
  <IDENTIFRIAR>
    str
  </IDENTIFRIAR>
  <SYMBOL>
    =
  </SYMBOL>
  <STRING-CONSTANT>
    Hello world!
  </STRING-CONSTANT>
  <BOOLEAN-CONSTANT>
    true
  </BOOLEAN-CONSTANT>
</elements>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23630891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档