2

XML の特殊文字に関して、特定の問題が発生しています。基本的に、Xalan Processor を使用して xml を複数の xml に分割しています。

ドキュメントを分割するとき、生成されたファイルの名前として名前タグの値を使用しています。問題は、™ (TM) や ® (R) などの XML プロセッサによって認識されない文字が名前に含まれていることです。ファイルに名前を付けるときにのみ、これらの文字を削除したい。

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

上記は、XML を複数の XML に分割するために作成した XSL コードです。ご覧のとおり、変換メソッドを使用して、名前の「/」、「<」、「>」を「」に置き換えています。™ (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

上記の 2 つの式のいずれかを使用することをお勧めします。少なくとも 2 番目の式はうまく機能する可能性があります。

于 2010-07-08T19:31:05.520 に答える
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
于 2010-07-08T20:12:19.650 に答える