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 に答える