2
我需要一个bash脚本来处理和编辑PDF文件。使用XSL删除SVG中的元素使用XSL
我已经成功将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>
我想删除其中id为“glyph0”开头的所有“符号”的节点,这意味着我会得到下面的输出:
<?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>
我与最短的比赛,如比赛=“SVG/DEFS/G /记号”甚至试图,甚至匹配=“符号”,它仍然不不要修改svg文件。
有没有办法使用XML工具(或bash脚本,如果更简单)删除所有“glyph0- *”符号?
这是令人印象深刻的,并解决了一个问题,我试图解决几个小时。如果我有很多节点要处理,是不是有办法摆脱样板? –
@userunknown不确定你的意思是“样板”。 –
那么,“svg:符号”,而不是“符号”和“xmlns:svg ...” - 部分。不能在文件范围内指定一次吗?对不起,我不深入xml/xslt主题。可能是一个非常愚蠢的问题。 –