Java XML验证:发现以元素开头的无效内容
我面临着这个问题,无法解决它。 我有这个xsd。我想用这个模式验证的xml如下Java XML验证:发现以元素开头的无效内容,java,xml,xsd,xsd-validation,xml-validation,Java,Xml,Xsd,Xsd Validation,Xml Validation,我面临着这个问题,无法解决它。 我有这个xsd。我想用这个模式验证的xml如下 <?xml version="1.0"?> <OFX> <SIGNONMSGSRSV1> <SONRS> <STATUS> <CODE>0</CODE> <SEVERITY>INFO</SEVERITY&g
<?xml version="1.0"?>
<OFX>
<SIGNONMSGSRSV1>
<SONRS>
<STATUS>
<CODE>0</CODE>
<SEVERITY>INFO</SEVERITY>
</STATUS>
<DTSERVER>20120716233626.570[-7:PDT]</DTSERVER>
<LANGUAGE>ENG</LANGUAGE>
<FI>
<ORG>Symitar</ORG>
<FID>01182</FID>
</FI>
<INTU.BID>01182</INTU.BID>
<INTU.USERID>66983</INTU.USERID>
</SONRS>
</SIGNONMSGSRSV1>
<BANKMSGSRSV1>
<STMTTRNRS>
<TRNUID>0</TRNUID>
<STATUS>
<CODE>0</CODE>
<SEVERITY>INFO</SEVERITY>
</STATUS>
<STMTRS>
<CURDEF>USD</CURDEF>
<BANKACCTFROM>
<BANKID>
</BANKID>
<ACCTID>66983-S80</ACCTID>
<ACCTTYPE>CHECKING</ACCTTYPE>
</BANKACCTFROM>
<BANKTRANLIST>
<DTSTART>20120501</DTSTART>
<DTEND>20120716</DTEND>
<STMTTRN>
<TRNTYPE>FEE</TRNTYPE>
<DTPOSTED>20120713135400</DTPOSTED>
<TRNAMT>-25.00</TRNAMT>
<FITID>30403620120713WF</FITID>
<NAME>Account Transaction</NAME>
<MEMO>Withdrawal Fee</MEMO>
</STMTTRN>
</BANKTRANLIST>
<LEDGERBAL>
<BALAMT>-254.64</BALAMT>
<DTASOF>20120716233626</DTASOF>
</LEDGERBAL>
<AVAILBAL>
<BALAMT>-254.64</BALAMT>
<DTASOF>20120716233626</DTASOF>
</AVAILBAL>
</STMTRS>
</STMTTRNRS>
</BANKMSGSRSV1>
</OFX>
当我试图在线或用java代码验证这个xml时。我得到以下错误
cvc-complex-type.2.4.d: Invalid content was found starting with element 'SEVERITY'
cvc-complex-type.2.4.d: Invalid content was found starting with element 'DTSERVER'
cvc-complex-type.2.4.d: Invalid content was found starting with element 'FID'
and so on....
告诉我xsd中的错误是什么。您已经声明了所有类似
在
或
XML模式选择元素只允许声明中包含的一个元素出现在包含元素中
您可以选择几种类型
<xs:complexType name="SONRS">
<xs:choice>
<xs:element name="STATUS" type="STATUS" minOccurs="0"
maxOccurs="1" />
<xs:element name="DTSERVER" type="xs:string" minOccurs="0"
maxOccurs="1" />
<xs:element name="LANGUAGE" type="xs:string" minOccurs="0"
maxOccurs="1" />
<xs:element name="DTPROFUP" type="xs:string" minOccurs="1"
maxOccurs="1" />
<xs:element name="DTACCTUP" type="xs:string" minOccurs="0"
maxOccurs="1" />
<xs:element name="FI" type="FI" minOccurs="0" maxOccurs="1" />
</xs:choice>
</xs:complexType>
地位也是如此。因此,您应该在xml for SONR中只包含一个元素,如果包含STATUS,则您有:
<xs:complexType name="STATUS">
<xs:choice>
<xs:element name="CODE" type="xs:integer" minOccurs="0"
maxOccurs="1" />
<xs:element name="SEVERITY" type="xs:string" minOccurs="0"
maxOccurs="1" />
<xs:element name="MESSAGE" type="xs:string" minOccurs="0"
maxOccurs="1" />
</xs:choice>
</xs:complexType>
因此,您应该包括代码、严重性或消息。正如我在评论中提到的。
问题在于架构,它定义了元素类型,但架构中没有提到元素,因此解析器抛出了无效内容的错误。您解决了这个问题吗?如果你已经解决了它,你是怎么做的?是的,我发现我的模式是错误的,它有元素类型,但没有元素本身,就像在模式的第一行中,我之前没有ofx元素,其他元素也没有ofx元素:)你能添加一个答案来解决这个问题吗?
<xs:complexType name="SONRS">
<xs:choice>
<xs:element name="STATUS" type="STATUS" minOccurs="0"
maxOccurs="1" />
<xs:element name="DTSERVER" type="xs:string" minOccurs="0"
maxOccurs="1" />
<xs:element name="LANGUAGE" type="xs:string" minOccurs="0"
maxOccurs="1" />
<xs:element name="DTPROFUP" type="xs:string" minOccurs="1"
maxOccurs="1" />
<xs:element name="DTACCTUP" type="xs:string" minOccurs="0"
maxOccurs="1" />
<xs:element name="FI" type="FI" minOccurs="0" maxOccurs="1" />
</xs:choice>
</xs:complexType>
<xs:complexType name="STATUS">
<xs:choice>
<xs:element name="CODE" type="xs:integer" minOccurs="0"
maxOccurs="1" />
<xs:element name="SEVERITY" type="xs:string" minOccurs="0"
maxOccurs="1" />
<xs:element name="MESSAGE" type="xs:string" minOccurs="0"
maxOccurs="1" />
</xs:choice>
</xs:complexType>