Очистка документа SVG путем добавления элементов в белый список

Я хочу извлечь около 20 типов элементов из некоторых документов SVG, чтобы сформировать новый SVG. прямоугольник , круг , многоугольник , текст , полилиния , в основном набор визуальных частей белого цвета список. Необходимо убрать JavaScript, комментарии, анимацию и внешние ссылки.

На ум приходят три метода:

  1. Regex: Я полностью знаком с ним и, очевидно, не хочу туда идти.
  2. PHP DOM: использовался один раз, возможно, год назад.
  3. XSLT: Только что я впервые посмотрел.

Если XSLT - правильный инструмент для работы, какая таблица стилей xsl: мне нужна? В противном случае, какой подход вы бы использовали?

Пример ввода:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" version="1.1" width="512" height="512" id="svg2">
<title>Mostly harmless</title>
  <metadata id="metadata7">Some metadata</metadata>

<script type="text/ecmascript">
<![CDATA[
alert('Hax!');
]]>
</script>
<style type="text/css">
<![CDATA[ svg{display:none} ]]>
</style>

  <defs id="defs4">
    <circle id="my_circle" cx="100" cy="50" r="40" fill="red"/> 
  </defs>

  <g id="layer1">
  <a xlink:href="www.hax.ru">
    <use xlink:href="#my_circle" x="20" y="20"/>
    <use xlink:href="#my_circle" x="100" y="50"/>
  </a>
  </g>
  <text>
    <tspan>It was the best of times</tspan>
    <tspan dx="-140" dy="15">It was the worst of times.</tspan>
  </text>
</svg>

Пример вывода. Отображает точно такое же изображение:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="512" height="512">
  <defs>
    <circle id="my_circle" cx="100" cy="50" r="40" fill="red"/> 
  </defs>
  <g id="layer1">
    <use xlink:href="#my_circle" x="20" y="20"/>
    <use xlink:href="#my_circle" x="100" y="50"/>
  </g>
  <text>
    <tspan>It was the best of times</tspan>
    <tspan dx="-140" dy="15">It was the worst of times.</tspan>
  </text>
</svg>

Примерный список элементов хранителя: g, rect, circle, ellipse, line, polyline, polygon, path, text, tspan, tref, textpath, linearGradient + stop, radialGradient, defs, clippath, path .

Если не конкретно SVG tiny, то уж точно SVG lite.

7
задан Volker E. 16 June 2014 в 23:30
поделиться