感谢您抽出宝贵时间来查看我的问题。
我有一个看起来像是的xml消息-
<soap:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getFunctionResponse xmlns="urn:JadeWebServices/WebService/">
<getResult xsi:type="WS_getResult">
<date>August 2018</date>
<ID>100964</ID>
<MoreContent>...</MoreContent>
</getResult>
</getFunctionResponse>
</soap:Body>
</soap:Envelope>
我正在尝试编写XSLT以使内容包装在getResult级别。 getResult标记名称会根据我调用的服务而更改,并且我需要根据名称执行不同的操作。
但是,它引用的xsi:type会使验证失败。当我删除xsi:type属性时,一切似乎都可以正常工作。我似乎无法绕过验证-有指针吗?
===================================== 编辑:基于评论
这是我到目前为止拥有的xsl
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:template match="/">
<xsl:choose>
<xsl:when test="name(soap:Envelope/soap:Body/*[1]) = 'getFunctionResponse'">
<Payload>
<xsl:value-of select="soap:Envelope/soap:Body/getFunctionResponse/getResult"/>
</Payload>
<!--Do some success response related transformation-->
</xsl:when>
<xsl:otherwise>
<Error>
<xsl:value-of select="soap:Envelope/soap:Body/getErrorResponse/getResult"/>
</Error>
<!--Do some Failure response related transformation-->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
基本上,我想要实现的是基于soap:Body下直接的节点名称执行不同的转换逻辑。我可以收到5种不同的“类型”响应,但是为了简单起见,我将XSLT缩短为显示两种情况。
================================================ ==编辑:确切错误消息
java.lang.RuntimeException: Validation error: on line 4 column 76 of file:///c:/Users/Desktop/FULL_P~1.XML:
XTTE1515: Unknown type {WS_getResult} specified in xsi:type attribute
at com.exln.stylus.CSaxon8Driver.doProcessing(CSaxon8Driver.java:281)
at com.exln.stylus.CProcessorDriver.process(CProcessorDriver.java:104)
Full_Payload.xml (4, 76)
Validation error: on line 4 column 76 of file:///c:/Users/Desktop/FULL_P~1.XML: XTTE1515: Unknown type {WS_getResult} specified in xsi:type attribute