2

我的 XML 中存在特殊字符的问题。基本上,我正在使用 Xalan 处理器将一个 xml 拆分为多个 xml。

在拆分文档时,我使用它们的名称标签值作为生成的文件的名称。问题是名称包含 XML 处理器无法识别的字符,例如 ™ (TM) 和 ® (R)。我只想在命名文件时删除这些字符。

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

以上是我编写的用于将 XML 拆分为 multlpe XML 的 XSL 代码。如您所见,我正在使用 hte translate 方法将名称中的 '/','<','>' 替换为 ''。我希望我可以对 ™ (TM) 和 ® (R) 做同样的事情,但它似乎不起作用。请告诉我我将如何做到这一点。

感谢您提前提供帮助。

4

2 回答 2

3

我没有 Xalan,但有 8 个其他 XSLT 处理器,这个转换:

<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

我建议您尝试使用上述两个表达式之一——至少第二个可能会成功。

于 2010-07-08T19:31:05.520 回答
2

按照 Dimitre 的回答,我认为如果您不确定 wich 中可能包含哪些特殊字符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
于 2010-07-08T20:12:19.650 回答