2016-04-04 15 views
0

içine iki farklı görev gerçekleştirerek iki farklı xslts var. Her iki görevi de gerçekleştiren tek bir xslt oluşturma gereksinimim var. Lütfen, hem xslts için kodları bwloe'ya bakın ve isterse tek bir xslt halinde birleştirilip birleştirilemeyeceğini bildirin.Bu iki xslts bir

İlk xsl, dp url open kullanarak bir url'ye istek göndermektedir. İkinci xsl, istekte bir etiket arar ve bu etiket mevcutsa, etiket şifrelenir.

Her iki görevi de tek bir xslt'de yapmak istiyorum. etiketi arayın, şifreleyin, isteği (varsa şifreli etiketle) url'ye gönderin.

<?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> 

VE Gerçekten yapabileceğini bir XSLT 2.0 işlemci kullanan eğer öyleyse

<?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> 

cevap

0

Sen XSLT 2.0 sorusunu etiketledi basitçe ör değişkeni işlemek

<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 bu konuda garip bir ördektir. İşlemci, herkesi şaşırtmaya yetecek istisnalar dışında XSLT 1.0'tır. Bu istisnalardan biri de, otomatik sonuç parçasını node-set dönüşümüne göre yapmasıdır. Bu nedenle, Martin'in XSLT 2.0 kodu DataPower üzerinde çalışmalıdır. – bjimba

+0

Yukarıdaki xslt, veri gücünde herhangi bir sözdizimi hatası vermese de, aradığım şey bu değil. Girdi isteğini belirtilen URL'ye gönderen ilk xsl girdisi olarak şifrelemeyi yapan ikinci xsl çıktısını istiyorum. Datapower'da, INPUT ve OUTPUT bağlamlarını kullanarak bunu kolayca yapabileceğim iki xsl dönüşüm işlemi kullanıyorum. Ama burada tek bir xsl dönüşümü kullanarak bunu yapmak istiyorum, dolayısıyla tek bir xslt. – anky316

+0

@ anky316, istediğinizi yanlış anladım ve önceki öneriyi ikinci bir girdi olarak ilk stil sayfasının sonucuyla beslediğimde snippet'i değiştirdim. Tüm kodlar veri gücüne özgü gibi göründüğü için test etmenin hiçbir yolu yok, bu yüzden kendinizi deneyin. –