XML验证给出了验证错误,但我找不到原因

时间:2011-11-16 14:09:22

标签: xml xsd

我试图设计一个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.

1 个答案:

答案 0 :(得分:3)

尝试将elementFormDefault="qualified"添加到&lt; schema&gt;元件。

更新

当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>