使用IBM Processor for XSLT 2.0进行XML验证/命名空间问题

时间:2013-03-13 23:55:22

标签: xml xslt xslt-2.0

我从第三方供应商处收到以下XML消息。我无法控制收到的消息。我把它简化为最简单的形式,同时仍然产生错误。 XML消息:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header/>
    <soap:Body/>
</soap:Envelope>

我使用的xsl文件是:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:import-schema
        namespace="http://schemas.xmlsoap.org/soap/envelope/"
        schema-location="http://schemas.xmlsoap.org/soap/envelope/" />

    <xsl:template match="/">
        <xsl:text>Help</xsl:text>
    </xsl:template>

</xsl:stylesheet>

当我尝试使用IBM XSLT 2.0处理器在Eclipse中运行转换并选中“启用验证”框时,我在xml验证期间收到以下错误:

cvc-elt.1.a: Cannot find the declaration of element 'soap:Envelope'

即使我无法控制传入的消息,有没有办法进行此传递验证?如果我确实控制了收到的消息,我会这样做并且它的工作非常好:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/
                            http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header/>
    <soap:Body/>
</soap:Envelope>

1 个答案:

答案 0 :(得分:1)

我不知道IBM XSLT 2.0处理器的细节,但从症状可以清楚地看出源文档的验证阶段无法访问样式表中使用xsl:import-schema声明的模式;您将不得不在文档中查找一些其他方式来告知验证过程在哪里找到合适的模式。