2016-04-04 201 views
0

我有兩個不同的xslts執行兩個不同的任務。我有要求創建一個xslt執行這兩個任務。請參閱bwloe這兩個xslt的代碼,並讓mw知道它們是否可以合併爲一個xslt。將這兩個xslts合併爲一個

第一個xsl使用dp url open將請求發佈到一個url。第二個xsl是在請求中搜索一個標籤,如果該標籤存在,該標籤將被加密。

我正在尋找在一個單一的xslt即兩個這些任務。尋找標籤,加密它,發送請求(帶有加密標籤,如果存在的話)到網址。

<?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,只是有足夠的例外來混淆每個人。其中一個例外就是它*自動將結果片段轉換爲節點集轉換,所以Martin的XSLT 2.0代碼應該可以在DataPower上運行。 – bjimba

+0

雖然上面的xslt並沒有在datapower上拋出任何語法錯誤,但這不是我正在尋找的。我希望執行加密的第二個xsl的輸出成爲將輸入請求發送到指定URL的第一個xsl的輸入。 在Datapower中,我使用了兩個xsl轉換動作,我可以通過使用INPUT和OUTPUT上下文輕鬆完成此操作。但是在這裏我想用一個單一的xsl轉換來完成,因此只需要一個xslt。 – anky316

+0

@ anky316,我改變了片段,因爲我誤解了你想要的內容,以前的建議會將第一個樣式表的結果作爲第二個樣式表的輸入。由於所有的代碼似乎都是特定於數據的,我無法測試,所以試試看。 –