2014-02-12 38 views
0

發現我有一個XML模式片段是這樣的:XML架構無效的內容與預期的元素

<xsd:complexType name="CustomStreamHandlerConfig"> 
    <xsd:complexContent> 
     <xsd:extension base="AbstractStreamHandlerConfig"> 
      <xsd:choice> 
       <xsd:sequence> 
        <xsd:element name="class" type="xsd:string" /> 
        <xsd:group ref="CustomParameters" /> 
        <xsd:group ref="NextElements" minOccurs="0" maxOccurs="unbounded" /> 
       </xsd:sequence> 
       <xsd:element name="config-file" type="xsd:anyURI" /> 
      </xsd:choice> 
     </xsd:extension> 
    </xsd:complexContent> 
</xsd:complexType> 

基本上,這種模式允許XML片段來描述一些參數(類,自定義參數CustomStreamHandlerConfig,等等)或配置文件的URI。

CustomParameters組允許在任何數量的single-params元素和multiple-params在任何數量的清單列表:

<xsd:group name="CustomParameters"> 
    <xsd:sequence> 
     <xsd:element name="single-params" type="KeyValue" minOccurs="0" maxOccurs="unbounded" /> 
     <xsd:element name="multiple-params" type="KeyMultipleValues" minOccurs="0" maxOccurs="unbounded" /> 
    </xsd:sequence> 
</xsd:group> 

KeyValueKeyMultipleValues複雜類型是這樣的:

<xsd:complexType name="KeyValue"> 
    <xsd:simpleContent> 
     <xsd:extension base="xsd:string"> 
      <xsd:attribute name="key" type="xsd:string" use="required" /> 
     </xsd:extension> 
    </xsd:simpleContent> 
</xsd:complexType> 

<xsd:complexType name="KeyMultipleValues"> 
    <xsd:sequence> 
     <xsd:element name="value" minOccurs="2" maxOccurs="unbounded" /> 
    </xsd:sequence> 
    <xsd:attribute name="key" type="xsd:string" use="required" /> 
</xsd:complexType> 

當我嘗試組裝一個代表CustomStreamHandlerConfig的XML片段:

<custom-stream-retriever> 
    <class>MyCustomStreamHandler</class> 
    <single-params key="single-key">single-value</single-params> 
    <mutiple-params key="multiple-key"> <!-- Invalid content --> 
     <value>multiple-value</value> 
     <value>multiple-value</value> 
    </mutiple-params> 
</custom-stream-retriever> 

我收到一個cvc-complex-type.2.4.a: Invalid content was found starting with element 'mutiple-params'.錯誤。

的事情是,當我檢查預期元素的列表中,我發現:One of '{..., "SomeNamespace":multiple-params, ...}' is expected.

我比較SomeNamespace(例如命名空間名稱)在我的模式文件中的targetNamespace,他們都是一樣的。我還必須精確地說明xsd:schema標籤有elementFormDefault="qualified"

爲什麼XML文件拒絕mutiple-params元素?

回答

2

不知道這是一個有趣的問題,還是一個錯字...您的XSD描述了multiple-params,而你的XML採用mutiple-params - 有在後者缺少L(L的小寫)。

+1

我想說你是對的。錯誤表示「發現......」多重參數「......預期多重參數」。 – Dijkgraaf

+0

是的,就是這樣...我的ctrl + space自動完成在Eclipse中必須使用以前版本的XSD文件,因爲刷新問題。 –

+0

不能相信我雖然沒有看到拼寫差異......非常感謝! –

相關問題