我正面临这个问题而无法解决问题。 我有这个xsd OFX.xsd。我希望使用此模式验证的xml如下:
<?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中的错误是什么。
答案 0 :(得分:1)
您可以选择多种类型
<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>
同样适用于STATUS。所以你应该只包含一个用于SONRS的xml元素,如果你包含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>
所以你应该包括CODE或SEVERITY或MESSAGE。
答案 1 :(得分:1)
正如我在评论中提到的那样。 问题出在架构上,它定义了元素类型,但架构中没有提到元素,因此解析器抛出了无效内容的错误。
答案 2 :(得分:0)
您已声明<xs:choice>
<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>
在<xs:sequence>
或<xs:all>
<xs:complexType name="STATUS">
<xs:sequence>
<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:sequence>
</xs:complexType>
Choice reference here XML Schema choice元素只允许声明中包含的一个元素出现在包含元素中。