使用XSL

时间:2016-05-17 13:57:21

标签: xml bash xslt svg

我需要一个可以处理和编辑PDF文件的bash脚本。

我已成功将PDF文件转换为SVG,现在正尝试删除此SVG不需要的内容。

以下是我要编辑的文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="595pt" height="842pt" viewBox="0 0 595 842" version="1.1">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph0-2">
<path style="stroke:none;" d="M 4.90625 -5.71875 C 4.453125 -6.171875 3.953125 -6.359375 3.296875 -6.359375 -5.71875 "/>
</symbol>
<symbol overflow="visible" id="glyph1-1">
<path style="stroke:none;" d="M 3.859375 -7.34375 L 1.625 -6.640625 C 1.4375 -6.59375 1.375 -6.515625 1.375 -6.390625"/>
</symbol>
</g>
</defs>
</svg>

我想删除所有&#34;符号&#34; id以&#34; glyph0&#34;开头的节点,意味着我会得到以下输出:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="595pt" height="842pt" viewBox="0 0 595 842" version="1.1">
<defs>
<g>
<symbol overflow="visible" id="glyph1-1">
<path style="stroke:none;" d="M 3.859375 -7.34375 L 1.625 -6.640625 C 1.4375 -6.59375 1.375 -6.515625 1.375 -6.390625"/>
</symbol>
</g>
</defs>
</svg>

我尝试使用以下xsl文件删除glyph0-0入口(首先):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="svg/defs/g/symbol[id='glyph0-0']"/>
</xsl:stylesheet>

当我使用xsltproc应用此过滤器时,它什么都不做。它意味着删除glyph0-0:

$xsltproc test-3.xsl test.svg | head 
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="595pt" height="842pt" viewBox="0 0 595 842" version="1.1">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke:none;" d=""/>
</symbol>

我尝试过最短的匹配,例如match =&#34; svg / defs / g / symbol&#34;,甚至匹配=&#34;符号&#34;,它仍然不会修改svg文件。

有没有办法删除所有&#34; glyph0 - *&#34;符号,使用XML工具(或bash脚本,如果这更容易)?

1 个答案:

答案 0 :(得分:2)

  

我想删除所有&#34;符号&#34; id以&#34; glyph0&#34;

开头的节点

为此,您需要更改:

<xsl:template match="svg/defs/g/symbol[id='glyph0-0']"/>

为:

<xsl:template match="svg:symbol[starts-with(@id,'glyph0-')]" xmlns:svg="http://www.w3.org/2000/svg"/>