XSLT 1.0 - Неизвестный тип {} указан в атрибуте xsi: type - PullRequest
0 голосов
/ 18 января 2019

Спасибо, что нашли время посмотреть на мой вопрос.

У меня есть сообщение мыльного 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:, который не проходит проверку. Когда я удаляю атрибут 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>

По сути, я пытаюсь добиться другой логики преобразования, основанной на имени узла непосредственно под мылом: 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 
...