我有一个XML,我需要生成一个XSD。我的XML如下:
实例
<mes:GetInboundResponseGetInboundSMS
xmlns:mes="http://abcd.com">
<response>
<messages>
<item>
<date>15/04/2014 00:00:00</date>
</item>
<item>
<date>01/07/2014 10:01:32</date>
</item>
</messages>
</response>
</mes:GetInboundResponseGetInboundSMS>
请注意,只有最外层元素GetInboundResponseGetInboundSMS
属于命名空间http://abcd.com
- 其余元素不属于。如何在XSD中指定它?
我已尝试过关注XSD,但这给了我错误:
XSD:
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="GetInboundResponseGetInboundSMS">
<xs:complexType>
<xs:sequence>
<xs:element name="response">
<xs:complexType>
<xs:sequence>
<xs:element name="messages">
<xs:complexType>
<xs:sequence>
<xs:element name="item"
maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
但是当我尝试使用在线验证器使用XSD验证实例时,我最终得到了这个错误:
无效。
错误 - 第1行,95行:org.xml.sax.SAXParseException; lineNumber:1; columnNumber:95; cvc-elt.1:找不到元素的声明&#39; mes:GetInboundResponseGetInboundSMS&#39;。
这是合乎逻辑的,因为我没有在XSD中提供命名空间。请帮助我理解如何仅为我的XSD中的外部元素提供此命名空间。
答案 0 :(得分:2)
你有两件事并不是你想要的。
您希望GetInboundResponseGetInboundSMS元素位于命名空间http://abcd.com中。
因此,请将targetNamespace="http://abcd.com"
添加到架构元素中。
您希望该元素的子元素(它们都被声明为GetInboundResponseGetInboundSMS元素的匿名复杂类型的本地元素)不合格。
因此,请将架构元素上的elementFormDefault="qualified"
更改为elementFormDefault="unqualified"
。
架构文档的开始标记应如下所示:
<xs:schema targetNamespace="http://abcd.com"
attributeFormDefault="unqualified"
elementFormDefault="unqualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">