找到以元素'elementName'开头的无效内容。此时不会有子元素

时间:2014-02-06 05:50:02

标签: java xml xsd xsd-validation

我正在使用xml,我使用xsd来验证我的xml文件。我的xsd和xml文件太长了,我可以给你一部分。

XSD文件:

...
<xs:complexType name="BankType">
    <xs:choice>
        <xs:element name="Code" type="codeType" minOccurs="1" maxOccurs="1" />
        <xs:element name="NewCode" type="codeType" minOccurs="0" maxOccurs="1" />
        <xs:element name="SWIFTBIC" type="swiftType" minOccurs="0" maxOccurs="1" />
        <xs:element name="Name" type="nameType" minOccurs="0" maxOccurs="1" />
        <xs:element name="CorAccount" type="accountType" minOccurs="0" maxOccurs="1" />
        <xs:element name="SubCorAccount" type="accountType" minOccurs="0" maxOccurs="1" />
        <xs:element name="TaxNumber" type="taxNumberType" minOccurs="0" maxOccurs="1" />
        <xs:element name="Address" type="addressType" minOccurs="0" maxOccurs="1" />
        <xs:element name="PhoneNumber" type="phoneNoType" minOccurs="0" maxOccurs="unbounded" />
        <xs:element name="FaxNumber" type="faxNumberType" minOccurs="0" maxOccurs="unbounded" />
    </xs:choice>
</xs:complexType>

<xs:complexType name="OperationsForBankType">
    <xs:sequence>
        <xs:element name="Method" type="methodType" minOccurs="1" maxOccurs="1" />
        <xs:element name="Bank" type="BankType" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
</xs:complexType>
...

XML文件:

...
<Operations>
  <Method>ADD</Method>
  <Bank>
    <Code>111111</Code>
    <SWIFTBIC>AAAAAAAA</SWIFTBIC>
    <Name>ASDFGHJKL</Name>
    <CorAccount>1111111111111111111111111111</CorAccount>
    <SubCorAccount>1111111111111111111111111111</SubCorAccount>
    <TaxNumber>1700792251</TaxNumber>
    <Address>Bakı şəhəri, Nizami küçəsi, 70</Address>
    <PhoneNumber>+994125981107</PhoneNumber>
    <FaxNumber>+994125980307</FaxNumber>
  </Bank>
  ...

错误是Reason: cvc-complex-type.2.4.d: Invalid content was found starting with element 'SWIFTBIC'. No child element is expected at this point.我该如何解决?

编辑:之前我使用过xs:sequence但标签的顺序可能会发生变化,这就是我无法使用它的原因。所有元素都可以出现,可以是空的,也不会发生..

2 个答案:

答案 0 :(得分:1)

正如我在xsd中看到的那样,所有元素都是预期的。

选择指标

指标指明可以出现一个或另一个子元素:

序列指标

指标指定子元素必须以特定顺序出现:

试试这个: -

<xs:complexType name="BankType">
    <xs:sequence>
        <xs:element name="Code" type="codeType" minOccurs="1" maxOccurs="1" />
        <xs:element name="NewCode" type="codeType" minOccurs="0" maxOccurs="1" />
        <xs:element name="SWIFTBIC" type="swiftType" minOccurs="0" maxOccurs="1" />
        <xs:element name="Name" type="nameType" minOccurs="0" maxOccurs="1" />
        <xs:element name="CorAccount" type="accountType" minOccurs="0" maxOccurs="1" />
        <xs:element name="SubCorAccount" type="accountType" minOccurs="0" maxOccurs="1" />
        <xs:element name="TaxNumber" type="taxNumberType" minOccurs="0" maxOccurs="1" />
        <xs:element name="Address" type="addressType" minOccurs="0" maxOccurs="1" />
        <xs:element name="PhoneNumber" type="phoneNoType" minOccurs="0" maxOccurs="unbounded" />
        <xs:element name="FaxNumber" type="faxNumberType" minOccurs="0" maxOccurs="unbounded" />
    </xs:sequence>
</xs:complexType>

答案 1 :(得分:0)

将complexType BankType更改为xs:all而不是xs:choice。但是,maxOccurs="unbounded"中无法xs:all,因此您需要将电话和传真号码限制为最大值。 1或者你需要创建一个容器元素(PhoneNumbers等),它可以包含多个数字,但最多可以包含1个。