2016-05-19 7 views
0

Hallo Ich habe Feld <name>ATTN Dani</name>, ich muss den ATTN entfernen, aber es kommt ATTN manchmal Attn oder Attn und sogar ATtn wie kann ich substring tun auf diesem habe ich die unten xslt getan, aber es beeinflusst den Wert .Ich möchte nicht der WertWie Teilstring mit Groß-und Kleinschreibung

<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

Sie können versuchen, 'translate()' zu verwenden, um die Zeichenfolge in Groß- oder Kleinschreibung zu konvertieren und dann zu vergleichen. Siehe hierzu: http://stackoverflow.com/questions/586231/how-can-i-convert-a-string-to-upper-or-lower-case-with-xslt –

+2

Übrigens, in Ihrem konkreten Beispiel hier, Sie werden niemals einen Namen haben, der mit '" ATTN "' beginnt, wie es in einem '' Block ist, der es speziell benötigt, um mit '" C/O "' zu beginnen, außer Sie haben mehr als ein 'name' Element als Kind der Wurzel. – Flynn1179

+1

Ihr Stylesheet sagt Version 1.0, aber 'high-case()' erfordert XSLT 2.0. Noch eine verwirrende Sache in deiner Frage. –

Antwort

0

betroffen sein, wenn Sie die Zeichenfolge beginnt mit „ATTN“ wissen aber nicht sicher, ob der Fall, könnten Sie verwenden:

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

die nachfolgende Teilkette zu extrahieren.

+0

Ich habe es nie mit der Anzahl der Zeichen versucht, vielen Dank –

2

Die Konvertierung in Groß-/Kleinschreibung erfolgt normalerweise mit der Methode translate in XSLT 1.0. Es ist im Allgemeinen nicht 100% geeignet, da Sie genau angeben müssen, welche Buchstaben den Fall wechseln sollen, was je nach Sprache variieren kann, aber für sprachunabhängige Anwendungen ist es in Ordnung, und Sie können sogar genau das herstellen, was Sie brauchen:

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

In Ihrem Fall könnte dies jedoch ein wenig riskant sein, da Sie auch Buchstaben in alles, was danach kommt, konvertieren werden.

Realistisch gesehen, du bist wahrscheinlich

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

Notieren Sie sich den Raum am Ende der Zeichenfolge müssen, die Sie mit dem Vergleich sind, das macht nur sicher ein Raum nac die ‚ATTN‘ gibt, und dann können Sie nur Teilstring-nach diesem Platz, um zu bekommen, was Sie brauchen.