2013-03-13 49 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聲明的模式;您必須查看文檔中的其他方法,告訴驗證過程在何處找到合適的模式。