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主題。可能是一個非常愚蠢的問題。 –