以下是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'的声明。
答案 0 :(得分:1)
你非常接近。除了定义Message
类型之外,您还必须声明Message
元素本身。您可以通过添加
<xsd:element name="Message" type="dmb:Message"/>
到您的XSD。然后,您的XML将对您的XSD有效。
如果您无法更改XSD,则还有其他两个选项:
Message
元素的新XSD,如上所示,
和xsd:include
来自固定XSD的类型定义。使用这个新的
XSD验证您的XML。xsi:type
。 (看到
How to restrict the value of an XML element using xsi:type in XSD?)