我正在尝试验证此XML文件

<session>
    <mic id="1" posname="T1" x="0.0" y="0.0" z="0.0" />
</session>


使用此XSD文件

<?xml version="1.0" encoding="utf-8"?>
<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    attributeFormDefault="unqualified"
    elementFormDefault="qualified">

    <xs:element name="session">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="mic" type="micType" minOccurs="1" maxOccurs="4">
                </xs:element>

                <xs:complexType name="micType">
                    <xs:simpleContent>
                        <xs:extension base="xs:string">
                            <xs:attribute type="xs:int" name="id"/>
                            <xs:attribute type="xs:string" name="posname"/>
                            <xs:attribute type="xs:float" name="x"/>
                            <xs:attribute type="xs:float" name="y"/>
                            <xs:attribute type="xs:float" name="z"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>


但我收到此错误消息:


  XmlSchema错误:元素http://www.w3.org/2001/XMLSchema:complexType在此上下文中无效。


如果我仅具有mic元素的属性定义,则程序可以正常运行。我不知道我在做什么错。我正在尝试让XSD验证mic元素的数据类型。有人可以告诉我我在做什么错吗?

最佳答案

您所拥有的是复杂类型的本地声明和全局声明的不可行的混合。在全局(如Michael Kay所述)或本地定义micType

全局complexType声明

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           attributeFormDefault="unqualified"
           elementFormDefault="qualified">
  <xs:element name="session">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="mic" type="micType" minOccurs="1" maxOccurs="4"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="micType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute type="xs:int" name="id"/>
        <xs:attribute type="xs:string" name="posname"/>
        <xs:attribute type="xs:float" name="x"/>
        <xs:attribute type="xs:float" name="y"/>
        <xs:attribute type="xs:float" name="z"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:schema>


局部complexType声明

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           attributeFormDefault="unqualified"
           elementFormDefault="qualified">
  <xs:element name="session">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="mic" minOccurs="1" maxOccurs="4">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute type="xs:int" name="id"/>
                <xs:attribute type="xs:string" name="posname"/>
                <xs:attribute type="xs:float" name="x"/>
                <xs:attribute type="xs:float" name="y"/>
                <xs:attribute type="xs:float" name="z"/>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>


两种方法都可以,并且可以成功验证XML。

关于c# - 元素http://www.w3.org/2001/XMLSchema:complexType在此上下文中无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46822224/

10-10 16:17