使用if语句的通配符

时间:2013-04-04 14:36:55

标签: xslt ibm-datapower

我正在尝试使用.xsl文件(DataPower设备)过滤掉传入连接的用户名。我有4个场景

user@domain.com - 需要保持原样。

user@remove.com - 需要删除域名部分。

user @ domain.com @ remove.com - 只需删除删除部分。

user@remove.com.anything - 再次需要删除此内容以及之后的所有内容。

这里有3个变量。 '用户'可以是任何东西。域名可以是任何东西。而remove.com之后的任何东西都可以是任何东西。 @ remove.com将永远是相同的。幸运的是,这是我们可以使用的常数。

我们可以使用简单的if / then语句来执行此操作。我们已经尝试过If,when,contains和似乎无法使其工作的许多变体。如果有帮助,我可以粘贴我们当前使用的代码。

感谢。

2 个答案:

答案 0 :(得分:0)

你的问题的一个很好的解决方案可以是正则表达式,试试“regexp:match(yourExpressionGoesHere)” 然后你只需为每个案例编写特定的正则表达式。

答案 1 :(得分:0)

我们想通了。很抱歉跳了枪,我们已经在这几天了。

以下是代码:

    <xsl:template match="@* | node()">
      <xsl:variable name="userid" select="substring-after(/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='Authenticate']/*[local-name()='username'],'@')"/>
<xsl:choose>
<xsl:when test="contains($userid,'remove')">     
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:*deleted*">
            <soapenv:Header />  
            <soapenv:Body>
                <urn:authenticate>
                    <userId0>
                           <xsl:value-of select="substring-before(/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='Authenticate']/*[local-name()='username'],'@remove.com')"/>
                    </userId0> 
                    <credential>
                           <xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='Authenticate']/*[local-name()='password']"/>       
                    </credential>
                </urn:authenticate>
            </soapenv:Body>
        </soapenv:Envelope>
    </xsl:when>
    <xsl:otherwise>
       <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:*deleted*">
            <soapenv:Header />  
            <soapenv:Body>
                <urn:authenticate>
                    <userId0>
                           <xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='Authenticate']/*[local-name()='username']"/>
                    </userId0> 
                    <credential>
                           <xsl:value-of select="/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='Authenticate']/*[local-name()='password']"/>       
                    </credential>
                </urn:authenticate>
            </soapenv:Body>
        </soapenv:Envelope>
</xsl:otherwise> 
</xsl:choose> 
    </xsl:template>