XSLT:从SVG文件中的不同标签中删除相同的属性

时间:2019-02-07 16:23:12

标签: xslt

如何编写XSLT模板以从 SVG 文件中的font-family<g>标签中删除<text>属性?

<text font-family="ComicRelief, ComicRelief" transform="translate(14.17 51.75)">S tars</text>
<g font-family="ComicRelief-Bold, ComicRelief Bold" font-weight="700">

2 个答案:

答案 0 :(得分:1)

除了利用匹配所有节点的模板并复制它们之外,还创建一个与font-family属性匹配的 empty 模板,仅当它们与g关联或text个元素节点。

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:svg="http://www.w3.org/2000/svg">

  <xsl:template match="svg:g/@font-family | svg:text/@font-family"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

注释:

  • SVG文件具有名称空间,需要在样式表中声明它们,即xmlns:svg="http://www.w3.org/2000/svg

  • 然后分别使用gtext分别引用svg:gsvg:text元素节点。

答案 1 :(得分:0)

请考虑以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
     <text font-family="ComicRelief, ComicRelief" transform="translate(14.17 51.75)">S tars</text>
     <g font-family="ComicRelief-Bold, ComicRelief Bold" font-weight="700"/>
</Root>

您可以从不同的xml标记中删除相同的命名属性,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <xsl:apply-templates/>
</xsl:template>

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="*/@font-family"/>

应渲染到SVG文件。 您可以参考转换here