0

.xsl ファイル (DataPower アプライアンス) を使用して着信接続のユーザー名を除外しようとしています。4つのシナリオがあります

user@domain.com - そのままにしておく必要があります。

user@remove.com - ドメイン部分を削除する必要があります。

user@domain.com@remove.com - 削除部分のみを削除する必要があります。

user@remove.com.anything - これとその後のすべてを削除する必要があります。

ここには 3 つの変数があります。「ユーザー」は何でもかまいません。ドメインは何でもかまいません。そして、remove.com の後の .anything は何でもかまいません。@remove.com は常に同じです。幸いなことに、これが使用できる定数です。

これを行うために使用できる簡単な if/then ステートメントはありますか。If、when、contains のさまざまなバリエーションを試してみましたが、機能しないようです。役立つ場合は、現在使用しているコードを貼り付けることができます。

ありがとう。

4

2 に答える 2

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>
于 2013-04-05T12:54:29.987 に答える
0

問題の適切な解決策は正規表現です。「regexp:match(yourExpressionGoesHere)」を試してから、ケースごとに特定の正規表現を記述するだけです。

于 2013-04-04T14:49:03.153 に答える