我有一个要求,我需要将XML消息的格式更改为另一种XML消息格式。
以下是需要转换的输入:
<soap:Envelope
xmlns:wsdl="http://ee.co.uk/customer/wsdl"
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
>
<soap:Header>
<Ids>
<userId>11111</userId>
<responsibilityId>234433</responsibilityId>
</Ids>
<requestId>123435</requestId>
<Token>e34OahuMch0Pai0Nbhr0</Token>
</soap:Header>
<soap:Body>
<wsdl:getPersonslip>
<personId>34343</personId>
</wsdl:getPersonslip>
</soap:Body>
</soap:Envelope>
转换后应该如下所示:
<params>
<param dataType="java.lang.int">11111</param>
<param dataType="oracle.jbo.domain.Number">234433</param>
<param dataType="java.lang.Date">34343</param>
</params>
如何使用XSL实现这一目标?不知道从哪里开始。如果有人能对它提供任何明确的帮助。
我在这里用来转换的XSL是:
<?xml version="1.0" encoding="UTF-8"?>
<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" />
<xsl:template match="/">
<params>
<xsl:if test="/soap:Envelope/soap:Body/wsdl:getPersonslip/personId">
<param dataType="java.lang.Date">
<xsl:value-of select="/soap:Envelope/soap:Body/wsdl:getPersonslip/personId"/>
</param>
</xsl:if>
</params>
</xsl:template>
</xsl:stylesheet>
但它似乎没有正确打印。
答案 0 :(得分:0)
如果不首先声明前缀,则不能使用soap:
或wsdl:
等前缀。
尝试:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wsdl="http://ee.co.uk/customer/wsdl"
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
exclude-result-prefixes="wsdl soap">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/soap:Envelope">
<params>
<param dataType="java.lang.int">
<xsl:value-of select="soap:Header/Ids/userId"/>
</param>
<param dataType="oracle.jbo.domain.Number">
<xsl:value-of select="soap:Header/Ids/responsibilityId"/>
</param>
<param dataType="java.lang.Date">
<xsl:value-of select="soap:Body/wsdl:getPersonslip/personId"/>
</param>
</params>
</xsl:template>
</xsl:stylesheet>