XML Schema验证错误 - 缺少元素声明

时间:2017-05-22 03:03:07

标签: xml xsd

以下是xsd。

<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 个答案:

答案 0 :(得分:1)

你非常接近。除了定义Message 类型之外,您还必须声明Message 元素本身。您可以通过添加

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

到您的XSD。然后,您的XML将对您的XSD有效。

如果您无法更改XSD,则还有其他两个选项:

  1. 编写一个定义Message元素的新XSD,如上所示, 和xsd:include来自固定XSD的类型定义。使用这个新的 XSD验证您的XML。
  2. 在XML文件中使用xsi:type。 (看到 How to restrict the value of an XML element using xsi:type in XSD?