You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加新复杂元素后QXmlSchemaValidator出现段错误

XML Schema 修改方案(解决QT验证段错误)

你的核心问题是XML Schema语法错误:直接在<xs:sequence>内部定义<xs:complexType>不符合Schema规范,这才导致QXmlSchemaValidator::validate()出现段错误。下面是正确的修改方案:

正确写法一:单独定义regulation类型再引用

先在Schema的合适位置(比如和startDefn同级)定义regulation的复杂类型,再在startDefn的序列中添加可选的regulation元素:

<!-- 先定义regulation的复杂类型 -->
<xs:complexType name="regulationDefn">
  <xs:sequence>
    <!-- 默认minOccurs="1",确保start和end必须同时存在 -->
    <xs:element ref="testsuite:start"/>
    <xs:element ref="testsuite:end"/>
  </xs:sequence>
</xs:complexType>

<!-- 修改后的startDefn -->
<xs:complexType name="startDefn">
  <xs:sequence>
    <xs:element ref="testsuite:obj"/>
    <xs:element minOccurs="0" ref="testsuite:starfile"/>
    <xs:element minOccurs="0" ref="testsuite:firfile"/>
    <xs:element minOccurs="0" ref="testsuite:funcfile"/>
    <!-- 添加可选的regulation元素,引用上面定义的类型 -->
    <xs:element name="regulation" type="testsuite:regulationDefn" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>

正确写法二:内嵌complexType到element中

如果不想单独定义regulationDefn,可以直接把complexType内嵌在regulation元素内部:

<xs:complexType name="startDefn">
  <xs:sequence>
    <xs:element ref="testsuite:obj"/>
    <xs:element minOccurs="0" ref="testsuite:starfile"/>
    <xs:element minOccurs="0" ref="testsuite:firfile"/>
    <xs:element minOccurs="0" ref="testsuite:funcfile"/>
    <!-- 直接在element内部定义complexType -->
    <xs:element name="regulation" minOccurs="0">
      <xs:complexType>
        <xs:sequence>
          <xs:element ref="testsuite:start"/>
          <xs:element ref="testsuite:end"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:sequence>
</xs:complexType>

错误原因说明

XML Schema的<xs:sequence>节点只允许包含element、group、choice、sequence等子节点,不能直接嵌套<xs:complexType>定义。你之前的写法违反了这个语法规则,导致Schema本身不合法,QT的验证器解析出错进而触发段错误。

上述两种写法都能满足你的需求:regulation元素是可选的(minOccurs="0"),一旦存在则必须同时包含start和end子元素(默认minOccurs="1",无需额外声明)。

内容的提问来源于stack exchange,提问作者Tyler Shellberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 16:05:00