Java 发现以元素';开头的内容无效;元素名称';。此时不需要任何子元素

Java 发现以元素';开头的内容无效;元素名称';。此时不需要任何子元素,java,xml,xsd,xsd-validation,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="c

我正在使用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>
...
...
<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>
  ...
错误是
原因:cvc复杂类型。2.4.d:发现以元素“SWIFTBIC”开头的无效内容。此时不需要子元素。
如何解决它


EDIT:我以前使用过
xs:sequence
,但是标签的顺序可能会改变,这就是为什么我不能使用它。所有元素都可以出现、可以为空、可以不出现。

将complexType BankType更改为
xs:All
而不是xs:choice。但是您不能在
xs:all
中使用
maxOccurs=“unbounded”
,因此您需要将电话和传真号码限制为最多1个,或者您需要创建一个容器元素(PhoneNumber等),该元素可以包含多个号码,但最多可以有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>


我无法使用
xs:sequence
,因为标记的顺序可能会改变。我无法更改xml文件。我只能将我的xsd文件更改为适用于XML。如果您希望有一个随机允许的顺序和多个PhoneNumber出现,则无法在符合XML模式1.0的模式中定义。但是在XMLSchema1.1中,这个限制被删除了,您可以将xs:choice更改为xs:all,它将完全满足您的需要。这里有一些XMLSchema1.1验证程序是用Java:Saxon(仅付费商业版本)和Xerces(仍处于测试阶段)编写的@kamal您可以发布swiftType元素的定义吗?
此错误不是基于
swiftType
,因为我从xml中删除了此行,之后我得到了与
name
元素相同的错误。Ok@kamal只是猜测你有没有试着改变这个的顺序。不要把新代码放在后面,而是把它放在其他地方(只是一个随机的想法)。另外,正如我所看到的,它不应该给出任何问题。我更改了
swiftType
的顺序,并且在
name
中得到了相同的错误,在此之后,我更改了
nameType
的顺序,并且在
corraccount
等中得到了相同的错误。在这之后,我从xml中删除了
中的所有行,除了
之外,我没有这样做我怀疑你的IDE(eclipse或Jdeveloper或者你正在使用的任何东西)。只需执行crtl+A-->crtl+x-->crtl+s-->crtl+v-->crtl+s即可。