2010-07-08 89 views
2

我的XML中存在特殊字符的certian問題。 Bascially我正在使用Xalan處理器將xml分成多個xml。僅通過XSLT從XML中刪除特殊字符僅用於特定標記

在分割文檔時,我將其名稱標記的值用作所生成文件的名稱。問題是該名稱包含XML™處理器無法識別的字符,如™(TM)和®(R)。我只想在命名文件時刪除這些字符。

<xsl:template match="products"> 
    <redirect:write select="concat('..\\xml\\product\\en\\',translate(string(name),'&lt;/&gt; ',''),'.xml')"> 

以上是我用XSL代碼將XML拆分爲多個XML的XSL代碼。正如你所看到的,我正在使用hte翻譯方法將'/','<','>'替換爲名稱中的''。我希望我可以用TM(TM)和®(R)做同樣的事情,但它似乎不起作用。 請指教我如何能夠做到這一點。

感謝您提前幫忙。

回答

3

我沒有Xalan的,但與其他8個XSLT處理器此thransformation:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

<xsl:template match="text()"> 
    <xsl:value-of select="translate(., '&lt;/&gt;™®', '')"/> 
    =================== 
    <xsl:value-of select="translate(., '&lt;/&gt;&#x2122;&#xAE;', '')"/> 
</xsl:template> 
</xsl:stylesheet> 

當這個XML文檔施加:

<t>XXX™ My Trademark®</t> 

產生通緝的結果:

XXX My Trademark 
    =================== 
    XXX My Trademark 

我建議您嘗試使用以上兩個表達式中的一個 - 至少第二個表達式可以成功工作。

2

關注Dimitre的回答,我認爲如果你不確定這個特殊字符可能在name,那麼也許你應該保留你認爲合法文件的名稱字符。

作爲例子:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text"/> 

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

隨着輸入:

<t>XXX™ My > Trademark®</t> 

結果:

XXX My Trademark