我正在尝试使用.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和似乎无法使其工作的许多变体。如果有帮助,我可以粘贴我们当前使用的代码。
感谢。
答案 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>