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>
DataPower在这方面是一个奇怪的鸭子。该处理器是XSLT 1.0,只是有足够的例外来混淆每个人。其中一个例外就是它*自动将结果片段转换为节点集转换,所以Martin的XSLT 2.0代码应该可以在DataPower上运行。 – bjimba
虽然上面的xslt并没有在datapower上抛出任何语法错误,但这不是我正在寻找的。我希望执行加密的第二个xsl的输出成为将输入请求发送到指定URL的第一个xsl的输入。 在Datapower中,我使用了两个xsl转换动作,我可以通过使用INPUT和OUTPUT上下文轻松完成此操作。但是在这里我想用一个单一的xsl转换来完成,因此只需要一个xslt。 – anky316
@ anky316,我改变了片段,因为我误解了你想要的内容,以前的建议会将第一个样式表的结果作为第二个样式表的输入。由于所有的代码似乎都是特定于数据的,我无法测试,所以试试看。 –