2012-02-18 41 views
14

我正在處理我的xml技能,但驗證器錯誤我的XSD在某些深層根源的位置。 相應的錯誤是:從元素'element'開始找到無效的內容。目前沒有子元素

  • 18:11 CVC-復type.2.4.d:無效含量被發現開始 與元件 'aktor'。預計在這一點上不會有子元素。
  • 37:11 cvc-complex-type.2.4.d:發現無效的內容,從元素'utwor'開始
    。預計在這一點上不會有子元素。

這裏的XSD:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:element name="filmy"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="film"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="tytul"/> 
         <xs:element name="gatunek"/> 
         <xs:element name="czasTrwania"/> 
         <xs:element name="premiera"/> 
         <xs:element name="produkcja"/> 
         <xs:element name="rezyser"/> 
         <xs:element name="scenariusz"/> 

         <xs:element name="obsada"> 
          <xs:complexType> 
           <xs:sequence> 
            <xs:element name="aktor"> 
             <xs:complexType> 
              <xs:sequence> 
               <xs:element name="imie"/> 
               <xs:element name="nazwisko"/> 
               <xs:element name="dataUrodzenia"/> 
               <xs:element name="postac"/> 
              </xs:sequence> 
             </xs:complexType> 
            </xs:element> 
           </xs:sequence> 
          </xs:complexType> 
         </xs:element> 

         <xs:element name="soundtrack"> 
          <xs:complexType> 
           <xs:sequence> 
            <xs:element name="utwor"> 
             <xs:complexType> 
              <xs:sequence> 
               <xs:element name="wykonawca"/> 
               <xs:element name="tytulUtworu"/> 
               <xs:element name="gatunekMuzyczny"/> 
              </xs:sequence> 
             </xs:complexType> 
            </xs:element> 
           </xs:sequence> 
          </xs:complexType> 
         </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

</xs:schema> 

這裏的XML:

<?xml version="1.0" encoding="utf-8"?> 
<filmy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <film> 
     <tytul>Fight Club</tytul> 
     <gatunek>Thriller, Psychologiczny</gatunek> 
     <czasTrwania>2h11m</czasTrwania> 
     <premiera>11 luty 1999</premiera> 
     <produkcja>Niemcy, USA</produkcja> 
     <rezyser>David Fincher</rezyser> 
     <scenariusz>Jim Uhls</scenariusz> 
     <obsada> 
      <aktor> 
       <imie>Edward</imie> 
       <nazwisko>Norton</nazwisko> 
       <dataUrodzenia>1969</dataUrodzenia> 
       <postac>Narrator</postac> 
      </aktor> 
      <aktor> 
       <imie>Brad</imie> 
       <nazwisko>Pitt</nazwisko> 
       <dataUrodzenia>1963</dataUrodzenia> 
       <postac>Tyler Durden</postac> 
      </aktor> 
      <aktor> 
       <imie>Helena</imie> 
       <nazwisko>Boham Carter</nazwisko> 
       <dataUrodzenia>1966</dataUrodzenia> 
       <postac>Marla Singer</postac> 
      </aktor> 
     </obsada> 
     <soundtrack> 
      <utwor> 
       <wykonawca>The Pixies</wykonawca> 
       <tytulUtworu>Where is my mind</tytulUtworu> 
       <gatunekMuzyczny>Rock</gatunekMuzyczny> 
      </utwor> 
      <utwor> 
       <wykonawca>The Pixies</wykonawca> 
       <tytulUtworu>Where is my mind</tytulUtworu> 
       <gatunekMuzyczny>Rock</gatunekMuzyczny> 
      </utwor> 
      <utwor> 
       <wykonawca>The Pixies</wykonawca> 
       <tytulUtworu>Where is my mind</tytulUtworu> 
       <gatunekMuzyczny>Rock</gatunekMuzyczny> 
      </utwor> 
     </soundtrack> 
    </film> 
</filmy> 

我不明白的問題,它說沒有子元素的預期,是有孩子數量限制嗎?我可以擴展它嗎?

我已經找到了我的問題的答案,可以相乘的元素必須具有maxOccurs =「unbounded」屬性。

+1

您應該將解決方案作爲答案發布,然後等待48小時並「接受」您自己的答案。這將標誌着用正確的解決方案爲未來用戶解答的問題。你不會得到任何積分,但你會使網站更好 – 2012-02-18 18:36:54

+0

其實你會得到2分來標記答案。 – 2012-02-19 10:13:52

回答

14

我已經找到了我的問題的答案,可以相乘的元素必須具有maxOccurs =「unbounded」屬性。

2

只是在這裏添加另一個答案,因爲接受的答案並不完全幫助我。

因此,如果您在這裏有類似於問題提問者的結構,則不能將maxOccurs="unbounded" 放在最外面的元素包裝上,因爲它將被視爲全局元素。

你必須,而不是把它像這樣所有潛在要素:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<xs:element name="filmy"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="film"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element maxOccurs="unbounded" name="tytul"/> 
         <xs:element maxOccurs="unbounded" name="gatunek"/> 
         <xs:element maxOccurs="unbounded" name="czasTrwania"/> 
         <xs:element maxOccurs="unbounded" name="premiera"/> 
         <xs:element maxOccurs="unbounded" name="produkcja"/> 
         <xs:element maxOccurs="unbounded" name="rezyser"/> 
         <xs:element maxOccurs="unbounded" name="scenariusz"/> 

...等

2

接受這個問題的答案,確實會解決問題,但不「正確」的解決方案。

的原因,增加無限,作品,就是XSD現在允許多個序列,即

<filmy> 
    <sequence> 
     <element_3> 
    </sequence> 
    <sequence> 
     <element_2> 
    <sequence> 
    <sequence> 
     <element_1> 
    <sequence> 
    </filmy> 

你應該做些什麼來解決這個問題,就是添加序列的元素,內容,按照正確的順序,即是這樣的:

filmy.getContent().add(element1) 
    filmy.getContent().add(element2) 
    filmy.getContent().add(element3) 

,這將給你:

<filmy> 
    <sequence> 
     <element_1> 
     <element_2> 
     <element_3> 
    <sequence> 
    </filmy> 

即只有一個序列,因此不需要無界。

相關問題