Ich benötige ein Bash-Skript, das eine PDF-Datei verarbeiten und bearbeiten würde.Entfernen Sie Elemente von SVG durch ID, mit XSL
Ich habe erfolgreich die PDF-Datei in SVG konvertiert, und versuche jetzt, Sachen, die ich nicht brauche, von diesem SVG zu entfernen. Hier
ist eine Probe der Datei, die ich bearbeiten möchten:
<?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>
Ich möchte alle „Symbol“ Knoten löschen, wo id mit „glyph0“ beginnt, was bedeutet, dass ich die folgende Ausgabe:
<?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>
I haben versucht, die folgenden XSL-Datei verwenden, die glyph0-0 Eingang (zunächst) zu entfernen:
<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>
Wenn ich diesen Filter mit xsltproc anwende, tut das nichts. Es sollte glyph0-0 entfernen:
$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>
Ich habe versucht, auch bei kürzesten Matches, wie match = "svg/defs/g/Symbol" oder sogar übereinstimmen = "Symbol", und es immer noch tut Ändern Sie nicht die Svg-Datei.
Gibt es eine Möglichkeit, alle "glyph0- *" Symbole zu entfernen, mit einem XML-Tool (oder einem Bash-Skript, wenn das einfacher ist)?
Das ist beeindruckend und löst ein Problem, ich habe versucht, für Stunden zu lösen. Wenn ich viele Knoten habe, gibt es keine Möglichkeit, das Boilerplate loszuwerden? –
@userunknown Nicht sicher, was Sie mit "Boilerplate" meinen. –
Nun, das "svg: symbol" statt nur "symbol" und der "xmlns: svg ..." - Teil. Kann dies nicht fileweit einmal angegeben werden? Es tut mir leid, ich bin nicht tief im xml/xslt-Thema. Wahrscheinlich eine sehr dumme Frage. –