2011-06-24 22 views
0

S-XML家的例如使用Lisp的 “打印XML” 的错误:http://common-lisp.net/project/s-xml/我时,我跟着S-XML网页

我用Clozure CL运行Lisp的。到目前为止它工作正常。

然后我试图S-XML象下面这样:

Welcome to Clozure Common Lisp Version 1.7-dev-r14406M-trunk (DarwinX8664)! 
? (load "~/quicklisp/setup.lisp") 
#P"/Users/zijia/quicklisp/setup.lisp" 
? (ql:quickload "s-xml") 
To load "s-xml": 
    Load 1 ASDF system: 
    s-xml 
; Loading "s-xml" 

("s-xml") 
? (in-package :s-xml) 
#<Package "S-XML"> 
? (print-xml '(p "Interesting stuff at " ((a href "http://slashdot.org") "SlashDot"))) 
< 
> Error: There is no applicable method for the generic function: 
>   #<STANDARD-GENERIC-FUNCTION GET-PREFIX #x302000AB172F> 
>  when called with arguments: 
>   (NIL) 
> While executing: #<CCL::STANDARD-KERNEL-METHOD NO-APPLICABLE-METHOD (T)>, in process listener(1). 
> Type :GO to continue, :POP to abort, :R for a list of available restarts. 
> If continued: Try calling it again 
> Type :? for other options. 
1 > 

(打印XML“(P “有趣的东西在”((A HREF “http://slashdot.org”) “Slashdot的”) ))从http://common-lisp.net/project/s-xml/复制而来。其余的例子运行良好。这个“print-xml”有什么问题?

谢谢。

回答

2

我在SBCL中得到了相同的结果。在煤泥快速检查发现以下变量:

(defvar *ignore-namespaces* nil 
    "When t, namespaces are ignored like in the old version of S-XML") 

我认为,在common-lisp.net文件已经过时。一个快速解决的办法是letsetf这个变量为t,这会导致print-identifier只打印该标识符。

我不知道命名空间是如何使用的;您可以尝试在更新的文档中找到该代码,深入代码或联系作者。

+0

感谢您的回答。我在哪里可以找到最新的s-xml文档? common-lisp.net是我能找到的最新版本。 –

0

首先,'print-xml'已经过时了。您可以编写自己的打印xml功能。而且你甚至不需要文档,因为s-xml的界面非常简单。因此,请检查xml.lisp以浏览源代码。 :)