我遇到一个问题,一个简单的 XSD 通过XmlSchemaSet对象加载, XML 使用XmlReaderSettings
加载这是我的XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="A">
<xs:complexType>
<xs:sequence>
<xs:element name="B">
<xs:complexType>
<xs:sequence>
<xs:element name="C" minOccurs="0" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="Properties" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Item" minOccurs="0">
</xs:element>
</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>
以下XML将在第5行生成错误(“无法找到属性'Name'.at第5:11行的架构信息:
<A>
<B>
<C>
<Properties>
<Item Name="OBJECT">
<Item Name="CONTENT"/>
</Item>
</Properties>
</C>
</B>
</A>
我的XSD出了什么问题?
答案 0 :(得分:0)
您缺少第二级项目及其属性的定义。
以下内容应位于您的顶级项目
之下@drawable/mydrawable_inset
所以看起来像这样
<xs:complexType>
<xs:sequence>
<xs:element name="Item">
<xs:complexType>
<xs:attribute name="Name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Name" type="xs:string" use="required" />
</xs:complexType>
如果您只需要一个级别的项目,或者您的第一个项目应该是自我终止的。但即便如此,您还必须定义属性。
答案 1 :(得分:0)
我认为您的XSD没有任何问题,您的架构处理器出了问题。以下是撒克逊报道的内容:
Saxon-EE 9.8.0.3J from Saxonica
Java version 1.8.0_121
Using license serial number V005192
Loading schema document file:/Users/mike/Desktop/temp/test.xsd
Finished loading schema document file:/Users/mike/Desktop/temp/test.xsd
Schema checking successful. Time: 738ms. Memory: 37Mb.
Using parser org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser
Processing file:/Users/mike/Desktop/temp/test.xml
Validation time: 244ms. Memory: 40Mb.
Validation successful
Item
的元素声明既没有simpleType
或complexType
子元素,也没有type
属性。 XSD第1部分中的相关规则在§3.3.2中,其中表示有效{类型定义}为:
与
<simpleType>
或<complexType>
对应的类型定义 [children]中的元素信息项,如果存在, 否则类型定义·由·实际值·解决 类型[attribute],否则是元素的{type definition} 声明·解决·由...的实际值 substitutionGroup [attribute],如果存在,否则为ur-type ·定义
所以在这种情况下,它是“ur-type definition·”,它只是xs:anyType
的一个奇特名称(见§3.4.7),允许任何内容。
可悲的是,微软还没有更新他们的架构处理器大约15年,而且这样的错误并不为人所知。
这表明你有三种前进方式:
向Microsoft提交错误并等待15年以获得解决方案
切换到其他架构处理器(例如Saxon)
通过声明元素Item
所需的类型来解决错误。