XSD 错误:cvc-complex-type.2.4.a: 发现以元素开头的内容无效

问题描述 投票:1回答:2

我有一个XML文件需要和XSD文件一起验证,但是当我想用XSD文件验证我的XML时,我得到了这个错误。

Cvc-complex-type.2.4.a: 发现以元素'ClientData'开头的内容无效。中的一个元素。{"http://www.myTest/xml/Import/user/data":ClientData}'是预期的,'2'行,'27'列。

这是我的XML文件

<?xml version="1.0" encoding="UTF-8"?>
<prefix:UteXmlComunicazione xmlns:prefix="http://www.myTest/xml/Import/user/data">
    <ClientData>
        <client>
            <pfPg>PF</pfPg>
            <Family>Alex White</Family>
            <name></name>
        </client>
        <vendor>
            <Timeperiod>
                <NumberofFactor></NumberofFactor>
                <year>2018</year>
            </Timeperiod>
            <Address>
                <Address1>
                    <top>Via</top>
                    <street>DANTE</street>
                    <number>108</number>
                    <Zipcode>20776</Zipcode>
                    <Code>033032</Code>
                </Address1>
            </Address>
        </vendor>
    </ClientData>
</prefix:UteXmlComunicazione>

而这是XSD

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.myTest/xml/Import/user/data" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="UteXmlComunicazione">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ClientData" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="client" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:string" name="pfPg"/>
                    <xs:element type="xs:string" name="Family"/>
                    <xs:element type="xs:string" name="name"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="vendor" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="TimePeriod" minOccurs="0">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element type="xs:short" name="year"/>
                          <xs:element type="xs:byte" name="NumberofFactor"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="Address" minOccurs="0">

我不知道是什么问题......请你告诉我是什么问题?

java xml xsd xsd-validation xml-validation
2个回答
2
投票

你眼前的错误是由于 ClientData 不在 XSD 的目标命名空间中。 看起来你打算在根元素上声明一个默认的命名空间,但你只是改变了根元素的命名空间。

改变

<prefix:UteXmlComunicazione xmlns:prefix="http://www.myTest/xml/Import/user/data">

<UteXmlComunicazione xmlns="http://www.myTest/xml/Import/user/data">

来修复您的即时错误。

这里是您的XML的更新副本,它将根据您的XSD的更新副本进行验证。 (这里是一个更新的XML副本,它将与你的XSD的更新副本进行验证。Address 元素已经被省略,因为你没有在你的XSD中包含它的定义,而且它不值得在这里构建)。)

XML

<?xml version="1.0" encoding="UTF-8"?>
<UteXmlComunicazione 
    xmlns="http://www.myTest/xml/Import/user/data"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.myTest/xml/Import/user/data try.xsd"
    >
  <ClientData>
    <client>
      <pfPg>PF</pfPg>
      <Family>Alex White</Family>
      <name></name>
    </client>
    <vendor>
      <TimePeriod>
        <year>2018</year>
        <NumberofFactor>0</NumberofFactor>
      </TimePeriod>
    </vendor>
  </ClientData>
</UteXmlComunicazione>

XSD

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
           targetNamespace="http://www.myTest/xml/Import/user/data"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="UteXmlComunicazione">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ClientData" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="client" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:string" name="pfPg"/>
                    <xs:element type="xs:string" name="Family"/>
                    <xs:element type="xs:string" name="name"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="vendor" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="TimePeriod" minOccurs="0">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element type="xs:short" name="year"/>
                          <xs:element type="xs:byte" name="NumberofFactor"/>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

1
投票

在XSD中,你有 elementFormDefault="qualified" 这使得所有的元素都需要被限定,而不仅仅是根元素。由于没有 prefix 在你 ClientData 在XML中,这是不工作的。

因此,或者在XML中对所有元素进行限定,或者改变XSD elementFormDefault的值。

https:/www.w3schools.comxmlel_schema.asp

elementFormDefault可选。在这个模式的目标命名空间中声明的元素的形式,该值必须是 "限定的 "或 "不限定的"。该值必须是 "qualified "或 "unqualified"。默认值是 "unqualified"。"unqualified "表示来自目标命名空间的元素不需要用命名空间前缀来限定。"qualified "表示来自目标命名空间的元素必须用命名空间前缀来限定。

© www.soinside.com 2019 - 2024. All rights reserved.