SVG/XML:删除不需要的XML/SVG www.w3.org/2000/svg标签?
问题描述:
我们喜欢将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“更干净”的潜力是什么?
答
如果你可以使用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标准属性也会被剥离。
我不得不翻转答案的四分之一。这个答案是非常正确和有用的。 – 2011-05-18 04:36:02