2016-04-04 10 views
0

2つの異なるタスクを実行する2つの異なるxsltsがあります。私は両方のタスクを実行する単一のxsltを作成する必要があります。 bwloeとxsltsの両方のコードを見て、それらが単一のxsltに結合できるかどうかを知ってください。これら2つのxsltsを1つにまとめる

最初のxslは、dp url openを使用してURLに要求を送信しています。 2番目のxslはリクエスト内のタグを検索していて、そのタグが存在する場合、そのタグは暗号化されます。

私はこれらの両方のタスクを単一のxslt ieで行うことを検討しています。タグを探し、それを暗号化し、URLにリクエスト(暗号化されたタグがある場合)を投稿します。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:dp="http://www.datapower.com/extensions" xmlns:env="http://schemas.xmlsoap.org/soap/envelope" 
extension-element-prefixes="dp" exclude-result-prefixes="dp" version="1.0"> 

<xsl:template match="/"> 

    <xsl:variable name="result"> 
     <dp:url-open target="{$URL}" response="responsecode-ignore" ssl-proxy="BlankSSL" 
      data-type="xml" http-method="post" timeout="30"> 
      <xsl:copy-of select="." /> 
     </dp:url-open> 
    </xsl:variable> 
</xsl:template> 

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:dp="http://www.datapower.com/extensions" xmlns:env="http://schemas.xmlsoap.org/soap/envelope" 
extension-element-prefixes="dp" exclude-result-prefixes="dp" version="1.0"> 




<xsl:template match="@*|node()"> 
<xsl:copy> 
    <xsl:apply-templates select="@*|node()" /> 
</xsl:copy> 


</xsl:template> 


    <xsl:template match="/*[local-name()='Envelope']/*[local-name()='accountNumber']"> 
    <xsl:copy> 
    <xsl:value-of select="dp:encrypt-string('http://www.w3.org/2001/04/xmlenc#tripledes-cbc','hex:1728289',/*[local-name()='Envelope']/*[local-name()='accountNumber'])"/> 
    </xsl:copy> 
    </xsl:template> 

答えて

0

あなたが本当にXSLT 2.0プロセッサを使用している場合、あなたは、単に、例えばで変数を処理することができますので、XSLT 2.0との質問にタグ付けされています

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:dp="http://www.datapower.com/extensions" xmlns:env="http://schemas.xmlsoap.org/soap/envelope" 
extension-element-prefixes="dp" exclude-result-prefixes="dp" version="1.0"> 

<xsl:variable name="first-step"> 
    <xsl:apply-templates/> 
</xsl:variable> 

<xsl:template match="/"> 

    <xsl:variable name="result"> 
     <dp:url-open target="{$URL}" response="responsecode-ignore" ssl-proxy="BlankSSL" 
      data-type="xml" http-method="post" timeout="30"> 
      <xsl:copy-of select="$first-step" /> 
     </dp:url-open> 
    </xsl:variable> 

    <xsl:apply-templates select="$result/*"/> 
</xsl:template> 


<xsl:template match="@*|node()"> 
<xsl:copy> 
    <xsl:apply-templates select="@*|node()" /> 
</xsl:copy> 
</xsl:template> 


    <xsl:template match="/*[local-name()='Envelope']/*[local-name()='accountNumber']"> 
    <xsl:copy> 
    <xsl:value-of select="dp:encrypt-string('http://www.w3.org/2001/04/xmlenc#tripledes-cbc','hex:1728289',/*[local-name()='Envelope']/*[local-name()='accountNumber'])"/> 
    </xsl:copy> 
    </xsl:template> 
+0

DataPowerはこの点で奇妙なダックです。プロセッサーはXSLT 1.0で、誰もが混乱するのに十分な例外があります。これらの例外の1つは、自動的なresult-fragment to node-set変換を行うため、MartinのXSLT 2.0コードがDataPowerで動作することです。 – bjimba

+0

上記のxsltはdatapowerで構文エラーを投げているわけではありませんが、私が探しているものではありません。私は、指定されたURLに入力要求を送信している最初のxslの入力に暗号化を行っている2番目のxslの出力をします。 Datapowerでは、私はINPUTとOUTPUTコンテキストを使って簡単にこれを行うことができる2つのxsl変換アクションを使用しています。しかし、ここで私は単一のxsl変換を使用してこれを行いたいので、単一のxsltです。 – anky316

+0

@ anky316、私はスニペットを変更しました。私はあなたが望むものを誤解していました。以前の提案は、最初のスタイルシートの結果を2番目のスタイルシートに入力しました。すべてのコードがデータパワーに特化しているようですので、テストする方法はありませんので、自分で試してみてください。 –

関連する問題