将这两个xslts合二为一

时间:2016-04-04 11:25:09

标签: xslt xslt-1.0 xslt-2.0 ibm-datapower

我有两个不同的xslts执行两个不同的任务。我需要创建一个执行这两个任务的xslt。请查看bwloe两个xslts的代码,让mw知道它们是否可以组合成一个xslt。

第一个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>

1 个答案:

答案 0 :(得分: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>