2011-05-14 464 views
1

我们喜欢将SVG代码与JQuery模板混合使用。当我们从Adobe Illustrator或Inkscape保存SVG图形时,它们不仅仅包含xmlns="http://www.w3.org/2000/svg"命名空间标签,它们拥有专有的“提示”或代码,将在HTML 5浏览器中被忽略。SVG/XML:删除不需要的XML/SVG www.w3.org/2000/svg标签?

我们希望在Inkscape中创建图形,然后使用它们而不必手动选择不需要的,忽略的标签,甚至可能会格式化它们。

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

我们将使用ASP.NET MVC 3使用JQuery .ajax调用提供这些模板,因此基于命名空间的C#XML“更干净”的潜力是什么?

回答

1

如果你可以使用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标准属性也会被剥离。

3

退房杰夫·席勒的工具冲刷:http://www.codedread.com/scour/

+0

我不得不翻转答案的四分之一。这个答案是非常正确和有用的。 – 2011-05-18 04:36:02