验证XML内容时出错:元素不能包含空格。内容模型为空

时间:2012-06-06 12:41:16

标签: xml validation xsd

您好我在尝试使用qti xml文档时遇到此错误。 这是xml文档:

     <respcondition title="Correct" >
      <conditionvar>
       <not>
         <varequal respident="1">A</varequal>
       </not>
       <varequal respident="1">B</varequal>
       <not>
            <varequal respident="1">C</varequal>
       </not>
      <varequal respident="1">D</varequal>
      </conditionvar>
        <setvar action="Set">1</setvar>
       <displayfeedback linkrefid="Correct"/>
     </respcondition>

这是xsd的片段,用于保护xml

       <!-- ******************* -->
            <!-- ** respcondition ** -->
             <!-- ******************* -->
               <xs:complexType name="respconditionThirdPartyType">
               <xs:sequence>
                 <xs:element name="conditionvar" type="conditionvarThirdPartyType"   maxOccurs="1"/>
                 <xs:element name="setvar" type="setvarThirdPartyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="displayfeedback" type="displayfeedbackThirdPartyType" minOccurs="0" maxOccurs="unbounded"/>
              </xs:sequence>
            <xs:attribute name="title" type="xs:string"/>
      </xs:complexType>


     <!-- ****************** -->
      <!-- ** conditionvar ** -->
       <!-- ****************** -->
       <xs:complexType name="conditionvarThirdPartyType">
          <xs:sequence>
           <xs:choice>
              <xs:element name="not" type="notThirdPartyType" minOccurs="0" maxOccurs="unbounded"/>
             <xs:element name="or" type="orThirdPartyType" minOccurs="0" maxOccurs="unbounded"/>
             <xs:element name="other" type="otherThirdPartyType" minOccurs="0" maxOccurs="unbounded"/>
           </xs:choice>
        <xs:element name="varequal" type="varequalThirdPartyType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
       </xs:complexType>

      <!-- ********* -->
        <!-- ** not ** -->
       <!-- ********* -->
      <xs:complexType name="notThirdPartyType">
          <xs:sequence>
             <xs:element name="varequal" type="varequalThirdPartyType"  minOccurs="0" maxOccurs="unbounded" />
         </xs:sequence>
       </xs:complexType>



      <!-- ************** -->
      <!-- ** varequal ** -->
      <!-- ************** -->
      <xs:complexType name="varequalThirdPartyType">
         <xs:simpleContent>
            <xs:extension base="xs:string">
               <xs:attribute name="respident" type="xs:string" use="optional"/>
               <xs:attribute name="case" default="No">
               <xs:simpleType>
           <xs:restriction base="xs:NMTOKEN">
               <xs:enumeration value="Yes"/>
              <xs:enumeration value="No"/>
          </xs:restriction>
         </xs:simpleType>
       </xs:attribute>
      </xs:extension>
     </xs:simpleContent>
     </xs:complexType>

命名空间'test.xsd'中的元素'conditionvar'在命名空间'test.xsd'中具有无效的子元素'varequal'。预期可能元素列表:'不'。 元素不能包含空格。内容模型为空。 元素不能包含空格。内容模型为空。 命名空间'test.xsd'中的元素'conditionvar'在命名空间'test.xsd'中具有无效的子元素'not'。预期可能元素列表:'varequal'。

请有人帮忙吗?我一直试图解决这个问题几天了.. 谢谢 干杯

找到答案:

好的,我找到了答案。我改变了conditionvar的定义。现在它正在运作。谢谢大家的帮助

 <!-- ****************** -->
 <!-- ** conditionvar ** -->
  <!-- ****************** -->
 <xs:complexType name="conditionvarThirdPartyType">
 <xs:sequence minOccurs="0" maxOccurs="unbounded">
  <xs:choice  minOccurs="0" maxOccurs="unbounded">
    <xs:element name="not" type="notThirdPartyType" />
    <xs:element name="or" type="orThirdPartyType" />
    <xs:element name="other" type="otherThirdPartyType" />
  </xs:choice>
  <xs:element name="varequal" type="varequalThirdPartyType"   minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

根据您的架构,在<conditionvar>元素中,预计会出现<not><or><other>。无论哪个,它可能出现零次或多次(minOccurs="0" maxOccurs="unbounded")。但是,<choice>元素必须只有一次,因为minOccursmaxOccurs没有为它设置(每个默认值为1)。接下来是零个或多个<varequal>元素。

由于我不确定您打算认为有效,我无法提供明确的更正架构片段,但我认为您实际上想要为{{1}中的minOccurs="0" maxOccurs="unbounded"元素设置<sequence>如此:

conditionvarThirdPartyType