2017-05-22 106 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这样的及时回复。 –