Ошибка синтаксического анализа XML - [s4s-elt-invalid-content.1] - PullRequest
0 голосов
/ 30 августа 2010

У меня проблемы при разборе файла 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 (s) встретил: [s4s-elt-invalid-content.1: содержимое 'QuoteFIBondPrice' недопустимо.Элемент 'sequence' недопустим, смещен или встречается слишком часто.(строка: 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)] класс com.db.dbadapter.util.xml.XMLValidatorParserException: SAXParseException (s) обнаружены:

[cvc-complex-type.2.3: элемент 'OfferPrice' не может иметьсимвол [дети], потому что тип содержимого типа только для элемента.(строка: 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)] **

@ Джон, @skaffman, есть ли у вас какие-либо предложения?

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 30 августа 2010

Вам не нужен элемент 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и примеры .

0 голосов
/ 30 августа 2010

Я считаю, что это неверная схема, а не само сообщение. complexContent должен содержать аннотации, ограничения или расширения.

Вы уверены, что это не просто complexType вместо вложенного complexContent?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...