2011-08-31 118 views
2

我想選擇所有文本並執行搜索和替換。
我想把所有的虛線變成非破折號破折號。XSLT選擇所有文本

我使用this template的搜索和替換部分,
現在我只需要運行的所有文字通吧..

+1

您需要一些測試數據來顯示您試圖匹配的內容。 – TheCodeKing

+0

當然.. https://gist.github.com/1184890 –

+0

而當你說文字?當然,你不是指整個文件?你只是指文本節點(保留結構)? – TheCodeKing

回答

3

我不知道什麼叫「非破衝刺」的意思,但這裏是一個簡單的解決方案

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:param name="vRep" select="'&#8212;'"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="text()"> 
    <xsl:value-of select="translate(.,'-', $vRep)"/> 
</xsl:template> 
</xsl:stylesheet> 

當這種轉化是在任何XML文檔應用,其結果是在其中任何'-'由任何取代被指定爲格洛巴的值相同的文檔l參數$ vRep

例如,當這個XML文檔施加:

<a> 
<b>Hi - hi</b> 
- - - 
<c> 
    <d>Wow... - cool</d> 
</c> 
- - - 
</a> 

結果是

<a> 
    <b>Hi — hi</b> 
— — — 
<c><d>Wow... — cool</d></c> 
— — — 
</a> 

說明:使用身份規則的,由模板重寫匹配任何文本節點,並將其中的任何'-'字符翻譯爲中包含的字符3210 - 通過使用標準的XPath函數translate()

+1

使用簡單的['translate()'](http://www.w3.org/TR/xpath/#function-translate)函數+1。 –

+0

這看起來不錯,但我似乎無法得到它的工作..它不是拋出一個錯誤,只是沒有處理任何東西.. –

+0

@Kirk Strobeck:這個轉換,應用於** *任何*** XML文檔,用'$ vRep'中指定的內容替換''-''。您可能試圖將其與您的代碼結合起來,這是您的問題。瞭解如何執行多遍轉換。 –