2016-05-19 53 views
0

嗨,我有字段<name>ATTN Dani</name>,我需要刪除ATTN,但它來了ATTN有時attn或Attn甚至ATtn我怎麼能做這個子字符串我做了下面的xslt,但它影響的價值。我不希望如果你知道字符串「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

順便說一句,在你的具體例子在這裏,你永遠不會有一個以'ATTN'開頭的名字,因爲它在''塊中,它特別要求它以'C/O'開頭,除非你有多個'name'元素作爲根的孩子。 – Flynn1179

+1

您的樣式表示版本1.0,但'大寫()'需要XSLT 2.0。在你的問題中更令人困惑的事情。 –

回答

0

,你可以使用:

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

提取後續子。

+0

從來沒有關於使用字符數量,非常感謝 –

2

轉換爲大寫/小寫通常使用XSLT 1.0中的translate方法完成。它通常不是100%合適的,因爲您必須指定切換大小寫的字母,這可能因語言而異,但對於與語言無關的應用程序而言,這很好,甚至可以減少到您需要的數量:

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

然而,在你的情況下,這可能會有一點風險,因爲你也可以在它後面的任何東西中轉換字母。

實際上,你可能會需要

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

注意空格在字符串的,你用的比較結束時,只是確保有AFTE的「ATTN」的空間,然後你可以在這個空間後面添加substring來獲得你需要的東西。

相關問題