通过执行转换二进制操作将非XML转换为XML

时间:2015-09-23 11:25:01

标签: xml xslt ibm-datapower

任何人都可以通过执行转换二进制操作建议我如何获得以下输出:

以下是我的意见:

STRTYP=HD&STRNBR=0121&PSTLCD=776&MDLNBR=FFGC3010QS 

我必须得到所需的输出:

<ROOT>
    <STRTYP>HD</STRTYP>
    <STRTYP>0121</STRTYP>
    <STRTYP>776</STRTYP>
    <STRTYP>FFGC3010QS</STRTYP>
</ROOT> 

我尝试过使用商店中的FFD文件:///pkcs7-convert-input.ffd 但我仍然没有得到上述输出.. 请纠正我在xslt中出错的地方。

这是我的XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:dp="http://www.datapower.com/extensions" extension-element-prefixes="dp">
    <xsl:output method="xml" indent="yes" />
    <xsl:strip-space elements="*" />

    <dp:input-mapping href="store:///pkcs7-convert-input.ffd" type="ffd" />
    <xsl:template match="/">
        <ROOT>
            <STRTYP>
                <xsl:copy-of select="." />
            </STRTYP>
        </ROOT>
    </xsl:template>

    <xsl:template match="args/arg">
        <STRTYP>
            <xsl:apply-templates select="node() | @*" />
        </STRTYP>
    </xsl:template>
    <xsl:template match="/*">
        <ROOT>
            <xsl:apply-templates select="node() | @*" />
        </ROOT>
    </xsl:template>
    <xsl:template match="node() | @*" name="identity">
        <xsl:copy>
            <xsl:apply-templates select="node() | @*" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="url" />
    <xsl:template match="base-url" />
    <xsl:template match="args">
        <xsl:apply-templates select="node() | @*" />
    </xsl:template>
    <xsl:template match="@*" />
</xsl:stylesheet>

2 个答案:

答案 0 :(得分:0)

您的代码有:

 <xsl:template match="/">
     <ROOT>
         <STRTYP>
             <xsl:copy-of select="." />
         </STRTYP>
     </ROOT>
 </xsl:template>

由于您使用xsl:copy-of,因此不会对其他模板进行进一步处理,因为在根节点匹配时(即最开始时)会调用指令副本。

如果我暂时假设当前输出看起来像输入,这意味着您已正确配置dp:output-mapping,那么您需要做的就是查看更改并查看应用的其他模板(如果匹配),是用xsl:copy-of替换xsl:apply-templates

答案 1 :(得分:0)

您只需通过数据电源配置即可实现此目的。您正在使用不正确的操作'Transform Binary'来实现此目的。而是在数据电源中使用“将查询参数转换为XML”。您将自动获得所需的输出。