0

这是一个文件yo.svg

<svg  width="200" height="200" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="50" stroke="black"  stroke-width="2" fill="red" />
</svg>

Firefox 和 Chrome 都将其呈现为带有黑色边框的红色圆圈。(我不知道其他浏览器在做什么)。

下面是一些 clojure 代码(1.4 版),它将其写入yo.svg、解析、重新编码,然后将结果写入yo2.svg,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<svg width="200" height="200">
  <circle cx="50" cy="50" r="50" stroke="black" stroke-width="2" fill="red"/>
</svg>

显然,clojure 正在做出改变。两种浏览器都不会呈现yo2.svg

我在想我做错了什么,但大量的研究让我感到困惑:

我想知道为什么 clojure 进行这些更改,以及我是否应该忽略 clojure.data.xml 并手动生成 xml,或者使用 clojure.data.xml 做中间位并编写我自己的标头。svg 甚至是一种 xml 吗?

这是我的clojure程序:

(require 'clojure.data.xml)
(let [ xml-picture "<svg  width=\"200\" height=\"200\" xmlns=\"http://www.w3.org/2000/svg\">
<circle cx=\"50\" cy=\"50\" r=\"50\" stroke=\"black\"  stroke-width=\"2\" fill=\"red\" />
</svg>"



      round-trip-picture (clojure.data.xml/indent-str
                             (clojure.data.xml/parse-str
                              xml-picture))]


  (spit "yo.svg" xml-picture)
  (spit "yo2.svg" round-trip-picture)
  (println xml-picture)
  (println "------------------")
  (println round-trip-picture))
4

1 回答 1

3

你想要的是:

(clojure.data.xml/parse-str xml-picture :namespace-aware false)

这样,解析器会将命名空间标记视为另一个属性。否则它不会在解析树中包含 xmlns 标记。

于 2012-12-29T23:36:11.557 回答