2011-11-16 91 views
2

我試圖設計XML模式,但我一直陷入困境。我的XML文件不會針對我的模式進行驗證。我懷疑我正在犯一些初學者的錯誤。任何人都可以指出我要出錯的地方嗎?錯誤信息對我沒有意義。XML驗證給出驗證錯誤,但我找不到原因

這是我的xsd文件:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.test.com/teststuff/XMLnamespace" > 
    <xs:element name="dataCollecFile"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="fileHeader" minOccurs="0" maxOccurs="unbounded"> 
      </xs:element> 
      <xs:element name="data" minOccurs="0" maxOccurs="unbounded"> 
      </xs:element> 
      <xs:element name="fileFooter"> 
      </xs:element> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

而這裏的XML文件,將不會驗證內容:

<?xml version="1.0" encoding="UTF-8"?> 
<dataCollecFile xmlns="http://www.test.com/teststuff/XMLnamespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.test.com/teststuff/XMLnamespace test.xsd"> 
    <fileHeader>heady head header</fileHeader> 
    <data>data data</data> 
    <fileFooter>foot feet feeter</fileFooter> 
</dataCollecFile> 

最後,這裏的錯誤信息,我從Java的的javax得到。 xml.validation.Validator類:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'fileHeader'. One of '{fileHeader, data, fileFooter}' is expected. 

回答

3

嘗試增加elementFormDefault="qualified"您< schema>元素。

UPDATE

當將elementFormDefault是不合格的,全局元素將甲肝目標名稱空間,但當地的元素將甲肝沒有命名空間。因此,如果您有架構的不合格版本,您的XML將不得不看起來像這樣:

<ns:dataCollecFile xmlns:ns="http://www.test.com/teststuff/XMLnamespace" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.test.com/teststuff/XMLnamespace test.xsd"> 
    <fileHeader>heady head header</fileHeader> 
    <data>data data</data> 
    <fileFooter>foot feet feeter</fileFooter> 
</ns:dataCollecFile> 
+0

謝謝,這個工程! 現在我的文件確認OK。 我發現了一個解釋,意思是: http://www.velocityreviews.com/forums/t292290-xsd-what-is-elementformdefault-qualified-for.html 但我仍然不明白爲什麼當我沒有該屬性集時,發生了錯誤。如果我希望它在elementFormDefault =「unqualified」時工作,那麼我的XML文件應該是什麼樣子? – Jolta

+0

感謝您的更新說明。最親切! – Jolta