XML和XSD验证失败:Element具有'type'属性和'anonymous type'子元素

log*_*gan 12 xml xslt xsd xml-parsing

我有一个XML文件和一个XSD文件来验证.当我验证时,它显示以下错误.

org.xml.sax.SAXParseException:src-element.3:元素'UC4'同时具有'type'属性和'anonymous type'子元素.元素中只允许其中一个.

XML文件:

<UC4Execution>
        <Script>JOB_NAME</Script>

        <UC4 Server="UC4.com" Client="123" UserId="123" Password="*****" >
        </UC4 >

</UC4Execution>
Run Code Online (Sandbox Code Playgroud)

XSD文件:

        <xs:element name="UC4Execution">
                <xs:complexType>
                <xs:sequence>

                    <xs:element name="Script" type="xs:string"/>
                    <xs:element name="UC4" type="xs:string" minOccurs="0">
                    <xs:complexType>
                        <xs:attribute name="Server" type="xs:string" use="required"/>
                        <xs:attribute name="Client" type="xs:string" use="required"/>
                        <xs:attribute name="UserId" type="xs:string" use="required"/>
                        <xs:attribute name="Password" type="xs:string" use="required"/>
                    </xs:complexType>
                    </xs:element>

                </xs:sequence>
                </xs:complexType>
            </xs:element>
Run Code Online (Sandbox Code Playgroud)

可能是什么问题?

Ian*_*rts 25

问题正是错误消息所说的位置:

<xs:element name="UC4" type="xs:string" minOccurs="0">
  <xs:complexType>
    <xs:attribute name="Server" type="xs:string" use="required"/>
    <xs:attribute name="Client" type="xs:string" use="required"/>
    <xs:attribute name="UserId" type="xs:string" use="required"/>
    <xs:attribute name="Password" type="xs:string" use="required"/>
  </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

你不能同时拥有type="xs:string"和嵌套complexType相同element.

如果您希望UC4元素只具有属性而没有嵌套的文本内容,则删除该type属性

<xs:element name="UC4" minOccurs="0">
  <xs:complexType>
    <xs:attribute name="Server" type="xs:string" use="required"/>
    <!-- ... -->
Run Code Online (Sandbox Code Playgroud)

如果你希望它有两个属性字符串内容

<UC4 Server="UC4.com" Client="123" UserId="123" Password="*****">content</UC4>
Run Code Online (Sandbox Code Playgroud)

那么你需要一个嵌套complexTypesimpleContent扩展xs:string

<xs:element name="UC4" minOccurs="0">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="Server" type="xs:string" use="required"/>
        <xs:attribute name="Client" type="xs:string" use="required"/>
        <xs:attribute name="UserId" type="xs:string" use="required"/>
        <xs:attribute name="Password" type="xs:string" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)