2016-05-17 79 views
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- *」符號?

回答

1

我想刪除其中id爲 「glyph0」

對於此啓動所有的 「符號」 的節點,你需要改變:

<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"/> 
+0

這是令人印象深刻的,並解決了一個問題,我試圖解決幾個小時。如果我有很多節點要處理,是不是有辦法擺脫樣板? –

+0

@userunknown不確定你的意思是「樣板」。 –

+0

那麼,「svg:符號」,而不是「符號」和「xmlns:svg ...」 - 部分。不能在文件範圍內指定一次嗎?對不起,我不深入xml/xslt主題。可能是一個非常愚蠢的問題。 –