【问题标题】:XML parsing failure - [s4s-elt-invalid-content.1]XML 解析失败 - [s4s-elt-invalid-content.1]
【发布时间】:2010-08-30 18:29:41
【问题描述】:

我在解析 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>

我得到的错误信息是这样的:

com.db.dbadapter.util.xml.XMLValidatorParserException 类:遇到 SAXParseException(s): [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(s):

[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,你有什么建议吗?

非常感谢

【问题讨论】:

    标签: xml parsing xsd


    【解决方案1】:

    你不需要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

    【讨论】:

    • 嗨,斯卡夫曼。好的,我将删除“complexContent”元素。但是我是否也需要删除“序列”元素?谢谢
    • 不错。我会改正并试一试。完成后我会告诉你的。非常感谢
    • 嗨,skaffman,我已经编辑了我的问题。不幸的是,错误已经改变。
    【解决方案2】:

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

    您确定它不只是 complexType 而不是嵌套的 complexContent

    【讨论】:

    • 嗨乔恩。事实上,我是 XML 模式的新手。你的意思是我必须删除“complexContent”元素?谢谢
    • @John:是的,删除元素但不删除其内容...基本上看 skaffman 的回答:)
    • 嗨乔恩,我已经编辑了我的问题。不幸的是,错误已经改变。
    • @John:好的,现在看起来架构是有效的,但内容与架构不匹配......
    • 错误提示“元素 'BidPrice' 不能有字符 [children],因为该类型的内容类型是仅元素。”我试图弄清楚这条消息的含义。我认为 XML 消息可能以这种格式出现: value 实际上它应该以这种格式出现: value 但我不是当然...
    猜你喜欢
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多