我对xslt没有经验,因此请求帮助解决我的问题。
基本上我向第三方服务发送肥皂请求,我收到以下回复
第三方对成功消息的回复
<?xml version="1.0" encoding="UTF-8"?>
<nm:Response xmlns:nm="http://fsag.de/BusinessTransaction">
<BTEMessage>
<InOrderContext>
<SendTimestamp>01-06-2017:0506230000</SendTimestamp>
</InOrderContext>
<SystemContext>
<Client>FDP</Client>
<CorrelationId>34553FTG25543SFD134</CorrelationId>
<BusinessContext>RECONCL</BusinessContext>
</SystemContext>
</BTEMessage>
但是当xml出现故障时,webservice将返回soap soap fault,如下所示:
来自第三方的错误消息
<?xml version="1.0" encoding="UTF-8"?>
<nm:Response xmlns:nm="http://fsag.de/BusinessTransaction">
<env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope" >
<env:Body>
<env:Fault>
<env:Code>
<env:Value>env:Sender</env:Value>
</env:Code>
<env:Reason>
<env:Text xml:lang="en-US">Processing error</env:Text>
<env:Text xml:lang="da">Processerings-fejl</env:Text>
</env:Reason>
</env:Fault>
</env:Body>
</env:Envelope>
</nm:Response>
所以基本上我需要有一个XSLT程序来生成如下目标:
如果没有错误消息目标为:
<?xml version="1.0" encoding="UTF-8"?>
<nm:BTEMessage xmlns:nm="http://fsag.de/BusinessTransaction">
<InOrderContext>
<SendTimestamp>20170601095410 </SendTimestamp>
</InOrderContext>
<SystemContext>
<Client>BTD</Client>
<CorrelationId>C67DCFBC3C031ED791D3F050E6E1C0DA</CorrelationId>
<BusinessContext>Collections</BusinessContext>
</SystemContext>
</nm:BTEMessage>
但如果返回SOAP错误,则目标为
<?xml version="1.0" encoding="UTF-8"?>
<nm:Response xmlns:nm="http://fsag.de/BusinessTransaction">
<BTEMessage>
<InOrderContext>
<SendTimestamp></SendTimestamp>
</InOrderContext>
<SystemContext>
<Client></Client>
<CorrelationId></CorrelationId>
<BusinessContext></BusinessContext>
</SystemContext>
</BTEMessage>
<env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope" >
<env:Body>
<env:Fault>
<env:Code>
<env:Value>env:Sender</env:Value>
</env:Code>
<env:Reason>
<env:Text xml:lang="en-US">Processing error</env:Text>
<env:Text xml:lang="da">Processerings-fejl</env:Text>
</env:Reason>
</env:Fault>
</env:Body>
</env:Envelope>
</nm:Response>
请在这里提供帮助吗?
到目前为止,我可以让它移动,因为不知道在xslt中考虑我的非常少的exp在哪里以及如何开始。此处理在SAP中执行,并且SAP提供XSL程序的兼容性,我认为这将实现。
答案 0 :(得分:1)
您可以为每种情况使用不同的模板:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:nm="http://fsag.de/BusinessTransaction"
xmlns:env="http://www.w3.org/2001/12/soap-envelope"
exclude-result-prefixes="env">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/nm:Response[BTEMessage]">
<nm:BTEMessage>
<xsl:copy-of select="BTEMessage/*"/>
</nm:BTEMessage>
</xsl:template>
<xsl:template match="/nm:Response[env:Envelope]">
<xsl:copy>
<BTEMessage>
<InOrderContext>
<SendTimestamp/>
</InOrderContext>
<SystemContext>
<Client/>
<CorrelationId/>
<BusinessContext/>
</SystemContext>
</BTEMessage>
<xsl:copy-of select="env:Envelope"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>