2010-07-08 122 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