2012-02-18 37 views
14

Tôi đang làm việc về các kỹ năng xml của mình, nhưng trình xác thực lỗi XSD của tôi ở những nơi có nguồn gốc sâu nhất định. Các erorrs là:Đã tìm thấy nội dung không hợp lệ bắt đầu bằng phần tử 'yếu tố'. Không có yếu tố con nào được mong đợi tại thời điểm này

  • 18: 11 cvc-phức-type.2.4.d: Nội dung không hợp lệ đã được tìm thấy bắt đầu với yếu tố 'aktor'. Không có yếu tố con nào được mong đợi vào thời điểm này.
  • 37: 11 cvc-complex-type.2.4.d: Tìm thấy nội dung không hợp lệ bắt đầu từ
    với phần tử 'utwor'. Không có yếu tố con nào được mong đợi vào thời điểm này.

Dưới đây là 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> 

Dưới đây là 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> 

Tôi không hiểu được vấn đề, nó nói không có yếu tố con đang mong đợi, là có một giới hạn cho số trẻ? Tôi có thể mở rộng nó không?

Tôi đã tìm thấy câu trả lời cho câu hỏi của mình, các thành phần có thể được nhân lên, phải có thuộc tính maxOccurs = "unbounded".

+1

Bạn nên đăng giải pháp làm câu trả lời, sau đó đợi 48 giờ và "chấp nhận" câu trả lời của riêng bạn. Điều này sẽ đánh dấu câu hỏi được trả lời, với giải pháp đúng, cho người dùng trong tương lai. Bạn sẽ không nhận được bất kỳ điểm nào, nhưng bạn sẽ làm cho trang web tốt hơn –

+0

Thực ra bạn sẽ nhận được 2 điểm để đánh dấu câu trả lời. –

Trả lời

14

Tôi đã tìm thấy câu trả lời cho câu hỏi của mình, các thành phần có thể được nhân lên, phải có thuộc tính maxOccurs = "unbounded".

2

Chỉ cần thêm một câu trả lời khác ở đây vì câu trả lời đã không hoàn toàn giúp tôi. Vì vậy, nếu bạn có một cấu trúc giống như người hỏi câu hỏi ở đây, bạn không thể đặt maxOccurs="unbounded" trên trình bao bọc phần tử ngoài cùng nhất vì nó sẽ được coi là một phần tử toàn cầu.

Bạn cần phải thay vì đặt nó trên tất cả các yếu tố tiềm năng như vậy:

<?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"/> 

... vv

2

Câu trả lời được chấp nhận cho câu hỏi này, thực sự sẽ giải quyết vấn đề, nhưng không phải là giải pháp "đúng".

Lý do, thêm vô biên, hoạt động, là xsd nay cho phép nhiều chuỗi, tức là

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

Bạn nên làm gì để giải quyết vấn đề, là thêm các yếu tố của chuỗi, đến nội dung, theo đúng thứ tự, tức là một cái gì đó như thế này:

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

mà sẽ cung cấp cho bạn:

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

tức là chỉ có MỘT chuỗi, và do đó không cần thiết phải không bị chặn.

Các vấn đề liên quan