嗨我有字段<name>ATTN Dani</name>
,我需要移除ATTN,但它来ATTN有时attn或Attn甚至ATtn我怎么能做这个子串我已经完成了下面的xslt但它影响了值。我不希望价值受到影响
<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 :(得分: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>
注意你要比较的字符串末尾的空格,这只是确保'ATTN'之后有一个空格,然后你可以在该空格后面的子字符串来获得你需要的东西。 / p>
答案 1 :(得分:0)
如果您知道该字符串以“ATTN”开头但不确定该案例,您可以使用:
<xsl:value-of select="substring(name, 6)" />
提取后续子字符串。