2011-11-16 90 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