XML解析失败 - [s4s-elt-invalid-content.1]

时间:2010-08-30 18:29:41

标签: xml parsing xsd

解析XML文件时遇到问题。使用的XML模式是:

<xsd:complexType name="QuoteFIBondPrice">
    <xsd:complexContent>
        <xsd:sequence>
            <xsd:element name="BidPrice" type="QuoteFIBondValue" minOccurs="0"/>
            <xsd:element name="MidPrice" type="QuoteFIBondValue" minOccurs="0"/>
            <xsd:element name="OfferPrice" type="QuoteFIBondValue" minOccurs="0"/>
            <xsd:element name="MaturityDate" type="DbGMLType:SystemName" minOccurs="0"/>
            <xsd:element name="Coupon" type="DbGMLType:SystemName" minOccurs="0"/>
            <xsd:element name="DisplayName" type="DbGMLType:SystemName" minOccurs="0"/>
        </xsd:sequence>
    </xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="QuoteFIBondValue">
    <xsd:all>
        <xsd:element name="QuoteValue" type="DbGMLType:QuoteValue" minOccurs="0"/>
    </xsd:all>
</xsd:complexType>

我得到的错误信息是:

class com.db.dbadapter.util.xml.XMLValidatorParserException:遇到SAXParseException: [s4s-elt-invalid-content.1:'QuoteFIBondPrice'的内容无效。元素'序列'无效,错位或过于频繁发生。 (第53行,第18列)]

你可以帮我一把吗?

我已经更改了XML架构,现在就是这样:

<xsd:complexType name="QuoteFIBondPrice">
    <xsd:sequence>
        <xsd:element name="BidPrice" type="QuoteFIBondValue" minOccurs="0"/>
        <xsd:element name="MidPrice" type="QuoteFIBondValue" minOccurs="0"/>
        <xsd:element name="OfferPrice" type="QuoteFIBondValue" minOccurs="0"/>
        <xsd:element name="MaturityDate" type="DbGMLType:SystemName" minOccurs="0"/>
        <xsd:element name="Coupon" type="DbGMLType:SystemName" minOccurs="0"/>
        <xsd:element name="DisplayName" type="DbGMLType:SystemName" minOccurs="0"/>
    </xsd:sequence>
</xsd:complexType>
<xsd:complexType name="QuoteFIBondValue">
    <xsd:all>
        <xsd:element name="QuoteValue" type="DbGMLType:QuoteValue" minOccurs="0"/>
    </xsd:all>
</xsd:complexType>

经过测试,我意识到之前的错误已更改为:

** [cvc-complex-type.2.4.a:从元素'BidPrice'开始发现无效内容。其中一个'{MaturityDate,Coupon,DisplayName}'是预期的。 (第35行,第17栏)]

[cvc-complex-type.2.3:元素'BidPrice'不能包含字符[children],因为类型的内容类型仅为元素。 (第35行,第35列)]

[cvc-complex-type.2.3:元素'MidPrice'不能有字符[children],因为类型的内容类型只是元素。 (第36行,第38列)] class com.db.dbadapter.util.xml.XMLValidatorParserException:遇到SAXParseException:

[cvc-complex-type.2.3:元素'OfferPrice'不能包含字符[children],因为类型的内容类型仅为元素。 (第34行,第39栏)]

[cvc-complex-type.2.4.a:从元素'BidPrice'开始发现无效内容。其中一个'{MaturityDate,Coupon,DisplayName}'是预期的。 (第35行,第17栏)]

[cvc-complex-type.2.3:元素'BidPrice'不能包含字符[children],因为类型的内容类型仅为元素。 (第35行,第35列)]

[cvc-complex-type.2.3:元素'MidPrice'不能有字符[children],因为类型的内容类型只是元素。 (第36行,第38栏)] **

@Jon,@ skaffman,你有什么建议吗?

非常感谢

2 个答案:

答案 0 :(得分:2)

您不需要complexContent元素,我不认为,您可以将sequence直接放在complexType下:

<xsd:complexType name="QuoteFIBondPrice">
    <xsd:sequence>
        <xsd:element name="BidPrice" type="QuoteFIBondValue" minOccurs="0"/>
        <xsd:element name="MidPrice" type="QuoteFIBondValue" minOccurs="0"/>
        <xsd:element name="OfferPrice" type="QuoteFIBondValue" minOccurs="0"/>
        <xsd:element name="MaturityDate" type="DbGMLType:SystemName" minOccurs="0"/>
        <xsd:element name="Coupon" type="DbGMLType:SystemName" minOccurs="0"/>
        <xsd:element name="DisplayName" type="DbGMLType:SystemName" minOccurs="0"/>
    </xsd:sequence>
</xsd:complexType>

请参阅w3schools docs and examples

答案 1 :(得分:0)

我认为这是无效的架构,而不是消息本身。 complexContent旨在包含注释,限制或扩展。

您确定它不仅仅是complexType而不是嵌套complexContent吗?