当 QXmlSchemaValidator 包含替代组时,它不会验证我的 XML。在线工具(http://www.utilities-online.info/xsdvalidation/、http://www.freeformatter.com/xml-validator-xsd.html)根据 XSD 验证 XML、XSD 和 XML 。
错误:
Error XSDError in file: (XML), at line 44, column 14: Element image_id is not defined in this scope.
相关代码,XSD:
<xs:element name="image_ids" abstract="true"/>
<xs:element name="image_id" type="xs:nonNegativeInteger" substitutionGroup="image_ids"/>
<xs:element name="image_queue_id" type="xs:nonNegativeInteger" substitutionGroup="image_ids"/>
<xs:element name="image_slot">
<xs:complexType>
<xs:all>
<xs:element ref="image_ids" maxOccurs="1"/>
<xs:element ref="caption" minOccurs="0" maxOccurs="1"/>
</xs:all>
<xs:attributeGroup ref="position"/>
</xs:complexType>
</xs:element>
相关代码,XML:
<image_slot x="7" y="110" width="55">
<image_id>0</image_id> <-- error
<caption>some caption</caption>
</image_slot>
QXmlSchemaValidator 验证 XSD,但不针对 XSD 验证 XML。摆脱替代组足以验证 XML,但这也意味着我失去了功能 - 现在将验证不正确的 XML 文件。因此我的问题是——Qt 是否真的支持 XML 替换组,还有我做错了什么(其他工具没有注意到)?
或者它是 QXmlSchemaValidator 中的一个错误,在这种情况下我应该放弃这个想法并找到另一个解决方案?
编辑:不得不等待一天才能发布我自己的答案。我得再等一天才能接受。