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

发布于 2024-11-07 10:03:59 字数 438 浏览 0 评论 0原文

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

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

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

我们将使用 ASP.NET MVC 3 通过 JQuery .ajax 调用来提供这些模板,因此是否有基于命名空间的 C# XML“清理器”的潜力?

We like mixing SVG code with JQuery templates. When we save SVG graphics from Adobe Illustrator or Inkscape, they have more than just the xmlns="http://www.w3.org/2000/svg" namespace tags, having proprietary "hints" or code that will be ignored in a HTML 5 browser.

We want to create graphics in Inkscape for example, then use them without having to manually cherry pick the unwanted, ignored tags, possibly even formatting them.

Is there code out there that could remove or minify the non-compliant svg tags produced by these programs based on xmlns="http://www.w3.org/2000/svg"?

We will use ASP.NET MVC 3 to supply these templates using JQuery .ajax calls, so there's the potential of a C# XML "cleaner" based on a namespace?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

百合的盛世恋 2024-11-14 10:03:59

如果您可以使用 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 标准属性也会被删除。

If you can use XSLT, the following transform will drop all elements that are not in the SVG namespace:

<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>

A little care is need to handle attribute correctly. Some SVG editing software will add additional attributes, so when we copy attributes, we only copy those in the default namespace so non-SVG standard attributes will also get stripped.

等待圉鍢 2024-11-14 10:03:59

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

Check out Jeff Schiller's tool Scour: http://www.codedread.com/scour/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文