2016-05-19 17 views
0

こんにちは私はフィールド<name>ATTN Dani</name>を持っていますが、ATTNを削除する必要がありますが、時にはattnやAttnやATtnでもATtnが発生します。大文字小文字を区別しない部分文字列への方法

<xsl:value-of select="substring(name, 6)" /> 

を、後続の部分文字列を抽出するために:.Iは、文字列は、例を確認してください「ATTN」で始まるではなく、知っている場合は、あなたが使用できる値は

<xsl:stylesheet version='2.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:pfx4="http://xmlns.oracle.com/apps/otm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:template match="/"> 
     <PARTNER_INBOUND_V2> 

     <xsl:choose> 

        <xsl:when test="starts-with(upper-case(//root/name), 'ATTN')"> 
         <IS_ACTIVE>Working</IS_ACTIVE> 
        <test><xsl:value-of select="normalize-space(substring-after(upper-case(//root/name),'ATTN'))"/></test> 
        </xsl:when> 
        <xsl:otherwise> 
         <IS_ACTIVE>Y</IS_ACTIVE> 
        </xsl:otherwise> 

     </xsl:choose> 
      </PARTNER_INBOUND_V2> 
    </xsl:template> 
</xsl:stylesheet> 
+0

'translate()'を使って文字列を大文字または小文字に変換し、比較することができます。これを参照してください:http://stackoverflow.com/questions/586231/how-can-i-convert-a-string-to-upper-or-lower-case-with-xslt –

+2

ちなみに、具体的な例では、複数の 'name'要素を持たない限り、特に' 'ATTN ''で始まる名前は決して '' C/O "'で始まる ''ブロックにあります。根の子として – Flynn1179

+1

あなたのスタイルシートはバージョン1.0ですが、 'upper-case()'にはXSLT 2.0が必要です。あなたの質問にもう一つ混乱していること。 –

答えて

0

に影響を与えたことにしたいいけません。

+0

文字数を使用しないでください、ありがとう –

2

大文字と小文字の変換は、通常、XSLT 1.0のtranslateメソッドを使用して行われます。大文字と小文字を切り替える文字は、言語によって異なる可能性がありますが、言語に依存しないアプリケーションの場合は、正確に指定する必要があります。

substring-after(translate(.,'atn','ATN'), 'ATTN') 

しかし、あなたのケースでは、後に来るものの文字も変換するので、これはやや危険です。

現実的には、おそらくそれは単に「ATTN」AFTEのスペースがあることを確認します、あなたと比較している文字列の最後に

<xsl:if test="translate(substring(//root/name,1,5),'atn','ATN') = 'ATTN '"> 
    <xsl:value-of select="substring-after(//root/name,' ')"/> 
</xsl:if> 

注スペースを必要とするつもりです、そのスペースを部分文字列にするだけで、必要なものを得ることができます。

関連する問題