2016-05-19 48 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来获得你需要的东西。

相关问题