2013-03-13 50 views
1

我收到来自第三方供应商的以下XML消息。我无法控制传入的消息。我已经将它简化为最简单的形式,但仍然产生错误。 XML消息:使用IBM处理器用于XSLT 2.0的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> 
+0

我没有IBM的XSLT 2.0处理器,但是**提供的转换对这三个XSLT 2.0处理器正常执行:Saxon 4.6EE,AltovaXML,XQSharp(XmlPrime)。** – 2013-03-14 03:55:15

回答

1

我不知道IBM的XSLT 2.0处理器的细节,但似乎从症状明显,源文档上的验证阶段无法访问样式表中使用xsl:import-schema声明的模式;您必须查看文档中的其他方法,告诉验证过程在何处找到合适的模式。