2017-05-22 74 views
1

繼缺少聲明是XSD。XML Schema驗證錯誤 - 元素

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:dmb="http://hmh.mycompany.com/schema/hmh/Message" 
    targetNamespace="http://hmh.mycompany.com/schema/hmh/Message" 
    elementFormDefault="qualified" attributeFormDefault="unqualified" 
    version="1.0"> 

    <xsd:complexType name="Message"> 
     <xsd:annotation> 
      <xsd:documentation>This represents the message 
      </xsd:documentation> 
     </xsd:annotation> 
     <xsd:sequence> 
      <xsd:element name="provider" type="xsd:string" /> 
      <xsd:element name="product" type="xsd:string" /> 
      <xsd:element name="status" type="xsd:string" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:schema> 

以下是xml文件。

<?xml version="1.0" encoding="UTF-8"?> 
<Message xmlns="http://hmh.mycompany.com/schema/hmh/Message"> 
    <provider>PRODUCT</provider> 
    <product></product> 
    <status></status> 
</Message> 

當嘗試使用http://www.utilities-online.info/xsdvalidation驗證它,我得到了以下錯誤

2號線,62:org.xml.sax.SAXParseException; lineNumber:2; columnNumber:62; cvc-elt.1:找不到元素'Message'的聲明。

回答

1

你非常接近。除了定義Message類型,你也必須申報Message元素本身。您可以通過添加,

<xsd:element name="Message" type="dmb:Message"/> 

到您的XSD。那麼你的XML將對你的XSD有效。


如果你不能改變的XSD,那麼你有其他兩個選項:

  1. 寫一個新的XSD定義Message元素如我上面, 和xsd:include類型定義從固定XSD。使用這個新的 XSD來驗證您的XML。
  2. 使用xsi:type XML文件英寸(請參閱 How to restrict the value of an XML element using xsi:type in XSD?
+0

不幸的是,我無法更改xsd。 –

+0

答更新,以提供當你不能改變XSD兩個選項。 – kjhughes

+0

感謝http://stackoverflow.com/users/290085/kjhughes這樣的及時回覆。 –