SVG / XML:删除不需要的XML / SVG www.w3.org/2000/svg 标签



我们喜欢将SVG代码与JQuery模板混合在一起。 当我们从Adobe Illustrator或Inkscape保存SVG图形时,它们不仅具有xmlns="http://www.w3.org/2000/svg"命名空间标签,还具有专有的"提示"或代码,这些"提示"或代码将在HTML 5浏览器中被忽略。

例如,我们想在 Inkscape 中创建图形,然后使用它们,而不必手动挑选不需要的、被忽略的标签,甚至可能格式化它们。

是否有代码可以删除或缩小这些程序基于xmlns="http://www.w3.org/2000/svg"生成的不合规的svg标签?

我们将使用 MVC 3 ASP.NET 通过 JQuery .ajax 调用提供这些模板,那么基于命名空间的 C# XML "清理器"是否有可能?

如果可以使用 XSLT,则以下转换将删除不在 SVG 命名空间中的所有元素:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:svg="http://www.w3.org/2000/svg">
<!-- Any element matching svg namespace is copied. -->
<xsl:template match="svg:*">
  <xsl:copy>
    <xsl:copy-of select="@*[namespace-uri()='']"/>
    <xsl:apply-templates select="node()"/>
  </xsl:copy>
</xsl:template>
<!-- Default: Exclude element -->
<xsl:template match="*"/>
</xsl:stylesheet>

需要小心一点才能正确处理属性。 一些 SVG 编辑软件会添加额外的属性,所以当我们复制属性时,我们只复制默认命名空间中的属性,所以非 SVG 标准属性也会被剥离。

查看 Jeff Schiller 的工具 Scour: http://www.codedread.com/scour/

最新更新